আগের লেখা গুলোঃ
এর আগে দেখেছি কিভাবে সাউন্ড প্লে করা যায়। এবার দেখব আলাদা আলাদা ইভেন্টে কিভাবে সাউন্ড প্লে করা যায়। তার জন্য প্রথমে Assets ফোল্ডারের ভেতর একটা ফোল্ডার তৈরি করে নিব Resources নামে। এই ফোল্ডারের ভেতর আমরা আমাদের সাউন্ড গুলো রাখব। ফ্রি সাউন্ড ডাউনলোড করা যাবে এই সাইট থেকে।
এবার একটা স্ক্রিপ্ট তৈরি করে নিব। SoundManager নামে। মেইন ক্যামেরাতে এই স্ক্রিপ্টটি যুক্ত করে নিব। আমরা তিনটে সাউন্ড নিয়ে কাজ করব। সম্পূর্ণ SoundManager এর কোডঃ
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SoundManager : MonoBehaviour { public static AudioClip playerHitSound, playerFlying, addScore; static AudioSource audioSource; void Start() { playerHitSound = Resources.Load<AudioClip>("hit"); playerFlying = Resources.Load<AudioClip>("fly"); addScore = Resources.Load<AudioClip>("score"); audioSource = GetComponent<AudioSource>(); } void Update() { } public static void PlaySound(string clip) { switch (clip) { case "hit": audioSource.PlayOneShot(playerHitSound); break; case "fly": audioSource.PlayOneShot(playerFlying); break; case "score": audioSource.PlayOneShot(addScore); break; } } }
প্রথমে ভ্যারিয়েবল ডিক্লেয়ার করেছি। এরপর প্রতিটা ভ্যারিয়েবলে একটি করে সাউন্ড সেট করেছি। এবং একটি ফাংশন লিখেছি। এখন যদি আমরা এই ফাংশনটি কল করি, তাহলে নির্দিষ্ট সাউন্ড প্লে হবে। যেমন FlyBird.cs এর if (Input.GetMouseButtonDown(0)) এর ভেতর যদি লিখি SoundManager.PlaySound(“fly”) তাহলে আমরা যত বার স্ক্রিনে টাচ করব, ততবার এই fly সাউন্ডটা প্লে হবে। কোন কিছুর সাথে লেগে গেলে প্লে করবে SoundManager.PlaySound(“hit”);।
সম্পূর্ণ FlyBird.cs:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FlyBird : MonoBehaviour { public GameManager gameManager; float velocity = 3; Rigidbody2D rb; void Start() { rb = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { rb.velocity = Vector2.up * velocity; SoundManager.PlaySound("fly"); } } private void OnCollisionEnter2D(Collision2D collision) { Time.timeScale = 0; SoundManager.PlaySound("hit"); gameManager.GameOver(); } }
AddScore.cs এ নিচের মত করে লিখতে পারি। প্রতিবার স্কোর বাড়লে একটি করে সাউন্ড প্লে হবে।
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AddScore : MonoBehaviour { private void OnTriggerEnter2D(Collider2D collision) { Score.score++; SoundManager.PlaySound("score"); } }
মজার ব্যপার হচ্ছে একবার এমন একটি সাউন্ড ম্যানেজার তৈরি করার পর প্রায় সব গেমেই রিউজ করা যাবে।
এবার তো একটা পূর্নাঙ্গ গেম হয়ে গেলো, তাই না? এখন ইচ্ছে করলে এই গেম এন্ড্রয়েড, আইওএস বা যে কোন প্লাটফর্ম এর জন্য বিল্ড করা যাবে। তার জন্য File > Build সেটিং এ যেতে হবে। এরপর যে প্লাটরম এর জন্য বিল্ড করতে চাচ্ছেন, তা সিলেক্ট কর্মের Switch Platform এ ক্লিক করতে হবে। এবং শেষে Build এ ক্লিক করলে ঐ প্লাটফর্মের জন্য গেম তৈরি হবে।
অ্যানিমেশন
আমাদের গেমে নিচের দিকে কোন গ্রাউন্ড নেই। আমরা এবার গ্রাউন্ড যুক্ত করব। তার জন্য এসেট থেকে গ্রাউন্ড ইমেজটি হায়ারাকিতে রাখব। এর মধ্যে Box Collider 2D যুক্ত করব। তাহলে ফ্লাপি যদি নিচে পড়ে যায়, তাহলেও গেম ওভার লেখা দেখাবে। আগের মত নিচের দিকে পড়ে যাবে না। Order in layer 2 দিব। তাহলে পাইপ গুলো এর পেছনে দেখাবে।
এখন যদি গেমটি প্লে করি, তাহলে দেখব গ্রাউন্ড মুভ করছে না। আমরা চাচ্ছি গ্রাউন্ড যেন মুভ করে। তাহলে মনে হবে ফ্লাপি উড়ে উড়ে সামনে যাচ্ছে। আর এর জন্য গ্রাউন্ডে অ্যানিমেশন যুক্ত করতে পারি। যা সুন্দর একটা অ্যানিমেশন দিবে।
অ্যানিমেশন দেওয়ার জন্য Windwo>Animation >Animation সিলেক্ট করলে অ্যানিমেশন উইন্ডো ওপেন হবে। গ্রাউন্ড সিলেক্ট করা অবস্থায় অ্যানিমেশন ট্যাবে গেলে আমাদেরর বলবে নতুন একটা অ্যানিমেশন ক্রিয়েট করতে। অ্যানিমেশন ক্রিয়েট করব। এই অ্যানিমেশন ট্যাব নিজের মত করে মুভ করে যে কোন জায়গায় রাখতে পারব।
অ্যানিমেশন যুক্ত করার জন্য প্রথমে রেকর্ড বাটন, লাল বিন্দু ঐটাতে প্রেস করব। এবার গ্রাউন্ডের পজিশন পরিবর্তন করব। যত বারর পরিবর্তন করব, ততবার একটা কী যুক্ত হবে এখন যদি এনিমেশনের প্লে বাটনে ক্লিক করি, তাহলে দেখব গ্রাউন্ড মুভ হচ্ছে। হয়তো দেখব অনেক দ্রুত মুভ হচ্ছে। কী সব গুলো সিলেক্ট করে যদি এর সময় বাড়িয়ে দেই তাহলে একটু স্লো হবে। এটা নিয়ে কিছুক্ষণ চেষ্টা করলেই বুঝা জবায়ে কিভাবে অ্যানিমেশন কাজ করে।
খুব সহজে কিভাবে অ্যানিমেশন তৈরি করা যায়, তা দেখাচ্ছি। রেকর্ড বাটনে ক্লিক করব প্রথমে। এরপর ইন্সপেক্টর থেকে পজিশনের X ভ্যালুটা যা আছে, তার আগে নেগেটিভ দিয়ে দিব। যেমন 2.02 থাকলে -2.02 দিব। তাহলেই হবে। এরপর প্লে বাটনে ক্লিক করলে দেখব সুন্দর একটা অ্যানিমেশন হচ্ছে।
গ্রাউন্ড যেন গেম সিনের ভেতরে থাকে, সেই দিকে খেয়াল রাখতে হবে। না হলে আবার গেম প্লেতে দেখা যাবে না।
আমাদের ক্যারেক্টারেও অ্যানিমেশন নেই। মানে ফ্লাই করে যে, সে অ্যানিমেশন। আমরা চাইলে খুব সহজেই ফ্লাপিতে অ্যানিমেশন যুক্ত করতে পারি। প্রথমে ফ্লাপি সিলেক্ট করব। এরপর অ্যানিমেশন ট্যাব থেকে নতুন একটা অ্যানিমেশন তৈরি করব। এবার প্রজেক্ট উইন্ডো থেকে ফ্লাপির তিনটা স্টেট এক সাথে ড্র্যাগ করে এনিমেশনে রাখব। প্লে করে দেখব ফ্লাপি উড়ার অ্যানিমেশন হচ্ছে। কিন্তু অনেক দ্রুত।
এনিমেশনের সব গুলো কী সিলেক্ট করলে স্লাইড করে সময় কমানো বাড়ানো যাবে। উপরের ছবিটি দেখলে বুঝে সুবিধে হবে। আরর এভাবে সময় বাড়ানোর পর প্লে করে ফ্লাপি ফ্লাই করার এনিমেশনও হচ্ছে।
অ্যানিমেশন যুক্ত হয়ে গেলো। এবার হাইস্কোর। কিভাবে দেখানো যায়? চেষ্টা করে দেখুন।
প্রজেক্টি পাওয়া যাবে গিট হাবে।
অনেক অনেক ধন্যবাদ ভাইয়া। এই প্রথম নিজে একটা গেম বানালাম। আগ্রহটা আরো অনেক খানি বেড়ে গেলো।