ডেভসংকেত

ইউনিটি গেইম ইঞ্জিন

জনপ্রিয় ইউনিটি গেইম ইঞ্জিনের প্রয়োজনীয় হট-কী এবং কোড স্নিপেট

কন্ট্রিবিউটর

  • iamraufu
  • SrejonKhan

শেয়ার করুন

হট-কী

  • প্যান টুল

    Q
  • মুভ টুল

    W
  • রোটেট টুল

     E
  • স্কেল টুল

    R
  • রেক্ট টুল

    T
  • অরবিট ন্যাভিগেশন

    Alt+LMB
  • ড্রাগ ন্যাভিগেশন (Drag)

    Alt+MMB
  • জুম (Zoom)

    Scroll wheel
  • নতুন এম্পটি গেইম অবজেক্ট বানাতে

    Ctrl+Shift+N
  • চাইল্ডের মধ্যে নতুন এম্পটি গেইম অবজেক্ট বানাতে

    Alt+Shift+N
  • সিলেক্টেড গেইম অবজেক্ট ডুপ্লিকেট করতে

    Ctrl+D
  • পূর্বাবস্থায় ফেরা (Undo)

    Ctrl+Z
  • পুনরায় করা (Redo)

    Ctrl+Y
  • সব সিলেক্ট করা (Select All)

    Ctrl+A
  • ইনভার্ট সিলেকশন (Invert Selection)

    Ctrl+I
  • সব ডিসিলেক্ট করা (Deselect All)

    Shift+D
  • গেইম অবজেক্ট খুজা (Find Object)

    Ctrl+F
  • গেইম অবজেক্ট ডিলিট করা

    Delete
  • ভিউ এর সাথে এলাইন করা (Align with view)

    Ctrl+Shift+F
  • প্লে/আন-প্লে (Play/Unplay)

    Ctrl+P
  • পজ/আন-পজ (Pause/Unpause)

    Ctrl+Shift+P
  • পরবর্তী ফ্রেমে যাওয়া (Step)

    Ctrl+Alt+P
  • সিলেক্টেড অবজেক্ট ভিউ এর সেন্টারে আনা

    F
  • সিলেক্টেড অবজেক্টে ভিউ লক করা

    Shift+F
  • ম্যাক্সিমাইজ/মিনিমাইজ উইন্ডো

    Shift+Space
  • বিল্ড এন্ড রান (Build and Run)

    Ctrl+B
  • বিল্ড সেটিংস ওপেন করা

    Ctrl+Shift+B
  • নতুন Scene বানানো

    Ctrl+N
  • Scene ওপেন করা

    Ctrl+O
  • Scene সেইভ করা

    Ctrl+S
  • Scene Save As প্রম্পট

    Ctrl+Shift+S
  • এসেট ডেটাবেজ রিফ্রেশ

    Ctrl+R

গেইম অবজেক্ট

  • নতুন গেইম অবজেক্ট বানাতে

    Instantiate(GameObject go);
  • নতুন গেইম অবজেক্ট বানাতে (পজিশন,রোটেশন সহ)

    Instantiate(GameObject go, Vector3 position, Quaternion rotation);
  • গেইম অবজেক্ট খুজতে

    GameObject.Find("গেইম_অবজেক্টের_নাম");
  • গেইম অবজেক্ট খুজতে (গেইম অবজেক্টে প্যারেন্ট থাকা যাবে না)

    GameObject.Find("/গেইম_অবজেক্টের_নাম");
  • কোনো প্যারেন্ট থেকে চাইল্ড গেইম অবজেক্ট খুজতে

    GameObject.Find("প্যারেন্টের_নাম/চাইল্ডের_নাম/গেইম_অবজেক্টের_নাম");
  • একই ট্যাগযুক্ত গেইম অবজেক্টদ্বয় খুজতে

    GameObject.FindGameObjectsWithTag("ট্যাগের_নাম");
  • কোনো ট্যাগযুক্ত গেইম অবজেক্ট খুজতে (একই ট্যাগের সর্বপ্রথম যেই গেইমঅবজেক্ট খুজে পাবে)

    GameObject.FindWithTag("ট্যাগের_নাম");
  • গেইম অবজেক্টের নাম

    go.name;
  • গেইম অবজেক্ট এক্টিভ করতে

    go.SetActive(true);
  • গেইম অবজেক্ট ডি-এক্টিভ করতে

    go.SetActive(false);
  • গেইম অবজেক্ট ডিস্ট্রয় করতে

    Destroy(gameObject);
  • গেইম অবজেক্ট থেকে কোনো কম্পোনেন্ট নিতে

    go.GetComponent<কম্পোনেন্ট_টাইপ>();
  • প্যারেন্ট গেইম অবজেক্ট থেকে কোনো কম্পোনেন্ট নিতে

    go.GetComponentInParent<কম্পোনেন্ট_টাইপ>();
  • চাইল্ড গেইম অবজেক্ট থেকে কোনো কম্পোনেন্ট নিতে (চাইল্ড থেকে সর্বপ্রথম যেটা খুজে পাবে)

    go.GetComponentInChildren<কম্পোনেন্ট_টাইপ>();
  • চাইল্ড গেইম অবজেক্ট (ইন-একটিভ সহ) থেকে কোনো কম্পোনেন্ট নিতে (চাইল্ড থেকে সর্বপ্রথম যেটা খুজে পাবে)

    go.GetComponentInChildren<কম্পোনেন্ট_টাইপ>(true);
  • গেইম অবজেক্টের পজিশন সেট করা

    go.transform.position = new Vector3(5f, 1f, 10.5f);
  • গেইম অবজেক্টের রোটেশন সেট করা

    go.transform.eulerAngles = new Vector3(60f, 0f, 30f);

টাচ ইনপুট

  • স্ক্রিনে টাচের সংখ্যা

    Input.touchCount
  • নির্দিষ্ট কোনো টাচের ইনফোরমেশন (Touch স্ট্রাক্ট)

    Touch touch = Input.GetTouch(n); //n টাচের ইন্ডেক্স, 0 মানে প্রথম টাচের ইনফো নিবে
  • নির্দিষ্ট কোনো টাচের স্ক্রিন পজিশন

    Vector3 touchPosition = touch.position;
  • নির্দিষ্ট কোনো টাচের স্ক্রিন পজিশন স্কিন স্পেস থেকে ওয়ার্ল্ড স্পেসে কনভার্সন

    Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
  • নির্দিষ্ট কোনো টাচের দশা

    Touch touch = Input.GetTouch(0);
     switch (touch.phase)
     {
     //যখন টাচ সনাক্ত হয় 
     case TouchPhase.Began:
     break;
     //যদি টাচটি মুভিং হয় 
     case TouchPhase.Moved:
     break;
     //যখন টাচটি শেষ হয়ে যায় 
     case TouchPhase.Ended: 
     break; 
     } 
    

ফিজিক্স ইভেন্টস

  • দু'টি গেইমঅবজেক্টের মধ্যে সংঘর্ষ হলে

    void OnCollisionEnter(Collision col) { Debug.log(gameObject.name + "Hits" + col.gameObject.name); }
  • দু'টি গেইমঅবজেক্টের মধ্যে সংঘর্ষ চলমান থাকলে

    void OnCollisionStay(Collision col) { Debug.log(gameObject.name + "Hitting" + col.gameObject.name); }
  • দু'টি গেইমঅবজেক্টের মধ্যে সংঘর্ষ শেষ হলে

    void OnCollisionExit(Collision col) { Debug.log(gameObject.name + "Stopped hitting" + col.gameObject.name); }
  • ট্রিগার ইনেবলড দু'টি গেইমঅবজেক্টের মধ্যে সংঘর্ষ হলে

    void OnTriggerEnter(Collider col) { Debug.log(gameObject.name + "Hits" + col.gameObject.name); }
  • ট্রিগার ইনেবলড দু'টি গেইমঅবজেক্টের মধ্যে সংঘর্ষ চলমান থাকলে

    void OnTriggerStay(Collider col) { Debug.log(gameObject.name + "Hitting" + col.gameObject.name); }
  • ট্রিগার ইনেবলড দু'টি গেইমঅবজেক্টের মধ্যে সংঘর্ষ শেষ হলে

    void OnTriggerExit(Collider col) { Debug.log(gameObject.name + "Stopped hitting" + col.gameObject.name); }
  • 2D গেইমঅবজেক্টের ফিজিক্স ইভেন্টের জন্য মেথড ও প্যারামিটারগুলোর শেষে 2D লাগাতে হবে

    void OnCollisionEnter2D(Collision2D col) { Debug.log(gameObject.name + "Hits" + col.gameObject.name); }

সিন(Scene) ম্যানেজমেন্ট

  • প্রয়োজনীয় ডিরেক্টিভ

    using UnityEngine.SceneManagement;
  • কোনো scene লোড করা

    SceneManager.LoadScene("SceneName");
  • কোনো scene ব্যাকগ্রাউন্ডে asynchronously লোড করা

    SceneManager.LoadSceneAsync("SceneName");
  • বর্তমান scene

    Scene scene = SceneManager.GetActiveScene();
  • বর্তমান scene রিলোড করা

    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
  • নাম দ্বারা scene পাওয়া

    Scene scene = SceneManager.GetSceneByName("SceneName");
  • এক scene থেকে অন্য scene এ গেইমঅবজেক্ট পাঠানো

    SceneManager.MoveGameObjectToScene(gameObject, SceneManager.GetSceneByName("SceneName"));
  • scene change এর সময় কোনো অবজেক্ট ডিস্ট্রয় না করা

    DontDestroyOnLoad(gameObject);
  • এক্টিভ scene change হওয়ার ইভেন্ট

    SceneManager.activeSceneChanged += (currentScene, nextScene) => { };

অডিও

  • ভ্যারিয়েবলে অডিও ক্লিপ স্টোর করা

    public AudioClip clip;
  • গেইম অবজেক্ট থেকে অডিও সোর্স কম্পোনেন্ট নেওয়া

    AudioSource audioSource = go.GetComponent<AudioSource>();
  • অডিও সোর্সে থাকা ক্লিপ প্লে করতে (চলাকালীন সময় পুনরায় কল করলে পুনরায় প্লে হবে)

    audioSource.Play();
  • অডিও সোর্সে কোনো ক্লিপ সম্পূর্ন একবার প্লে করতে (চলাকালীন সময় পুনরায় কল করলে পূর্ববর্তী ক্লিপ শেষ হওয়ার পর প্লে হবে)

    audioSource.PlayOneShot(clip);
  • অডিও সোর্স থামাতে (PlayOneShot() দ্বারা চালিত ক্লিপ থামবে না)

    audioSource.Pause();
  • অডিও সোর্স বন্ধ করতে (PlayOneShot() দ্বারা চালিত ক্লিপ বন্ধ হবে না)

    audioSource.Stop();
  • অডিও সোর্সের ভলিউম (0~1)

    audioSource.volume = 0.5f;
  • অডিও সোর্সের পিচ (-3~3)

    audioSource.pitch = 2f;

মনো বিহেভিওর ইভেন্ট ফাংশন (ক্রমানুসারে)

  • void Awake() { /*স্ক্রিপ্ট লোড হওয়ার সময় কল হয়। আবার গেইম শুরু হওয়ার একেবারে প্রথমে কল হয়।*/ }
  • void OnEnable() { /*অবজেক্ট ইনেবল হওয়ার সময় কল হয়*/ }
  • void Start() { /*গেইম শুরুর প্রথম ফ্রেমে, প্রথম আপডেটের আগে কল হয়। শুধু একবারই কল হয়*/ }
  • void FixedUpdate() { /*নির্দিষ্ট কিছু সময় পর পর বারবার কল হয়, ফ্রেমের উপর নির্ভরশীল নয়। ফিজিক্স ইভেন্টগুলো এরপর কল হয়*/ }
  • void Update() { /*প্রত্যেক ফ্রেমে একবার কল হয়*/ }
  • void LateUpdate() { /*প্রত্যেক ফ্রেমে আপডেট কল হওয়ার পর একবার কল হয়*/ }
  • void OnBecameVisible() { /*কোনো renderer কোনো ক্যামেরা দ্বারা দৃশ্যমান হলে কল হয়*/ }
  • void OnBecameInvisible() { /*কোনো renderer কোনো ক্যামেরা দ্বারা অদৃশ্যমান হলে কল হয়*/ }
  • void OnPreRender() { /*ক্যামেরা scene রেন্ডার শুরু করার পূর্বমূহুর্তে কল হয়*/ }
  • void OnRenderObject() { /*ক্যামেরা scene রেন্ডার শেষ করার সময় কল হয়*/ }
  • void OnPostRender() { /*ক্যামেরা scene রেন্ডার শেষ করার পর কল হয়*/ }
  • void OnApplicationPause() { /*ফ্রেমের শেষে কল হয় যদি গেইম পজ করা হয়*/ }
  • void OnApplicationQuit() { /*গেইম কুইট করার পূর্বমূহুর্তে কল হয়*/ }
  • void OnDisable() { /*কোনো অবজেক্ট ডিজেবল হলে কল হয়*/ }
  • void OnDestroy() { /*পূর্বে এক্টিভ ছিলো এমন গেইম অবজেক্ট ডিস্ট্রয় হলে কল হয়*/ }

ইনপুট (লেগাসি)

  • কোনো কী(Key) চাপা হয়েছিলো কিনা

    if (Input.GetKeyDown(KeyCode.Return)) { Debug.Log("Return key was pressed."); }
  • কোনো কী(Key) ছেড়ে দেওয়া হয়েছিলো কিনা

    if (Input.GetKeyUp(KeyCode.Return)) { Debug.Log("Return key was released."); }
  • কোনো কী(Key) চেপে রাখা হয়েছে কিনা

    if (Input.GetKey(KeyCode.Return)) { Debug.Log("Return key is being held down"); }
  • মাউসের প্রাইমারি (LMB) বাটন চাপা হয়েছিলো কিনা

    if (Input.GetMouseButtonDown(0)) { Debug.Log("Mouse Primary Button was pressed."); }
  • মাউসের প্রাইমারি (LMB) বাটন ছেড়ে দেওয়া হয়েছিলো কিনা

    if (Input.GetMouseButtonUp(0)) { Debug.Log("Mouse Primary Button was released."); }
  • মাউসের প্রাইমারি (LMB) বাটন চেপে রাখা হয়েছে কিনা

    if (Input.GetMouseButton(0)) { Debug.Log("Mouse Primary Button is being held down."); }
  • মাউসের সেকেন্ডারি (RMB) বাটন চাপা হয়েছিলো কিনা

    if (Input.GetMouseButtonDown(1)) { Debug.Log("Mouse Secondary Button was pressed."); }
  • মাউসের মিডল/স্ক্রল-হুইল (MMB) বাটন চাপা হয়েছিলো কিনা

    if (Input.GetMouseButtonDown(২)) { Debug.Log("Mouse Middle Button was pressed."); }
  • কোনো এক্সিসের ইনপুট ভ্যালু (-1~1)

    float value = Input.GetAxis("এক্সিসের নাম (Edit > Project Settings > Input)");
  • হরিজন্টাল এক্সিসের ইনপুট ভ্যালু (-1~1)

    float value = Input.GetAxis("Horizontal");
  • হরিজন্টাল এক্সিসের raw (স্মুথিং বাদে) ইনপুট ভ্যালু (-1~1)

    float value = Input.GetAxisRaw("Horizontal");
  • ভার্টিকাল এক্সিসের ইনপুট ভ্যালু (-1~1)

    float value = Input.GetAxis("Vertical");
  • ভার্টিকাল এক্সিসের raw (স্মুথিং বাদে) ইনপুট ভ্যালু (-1~1)

    float value = Input.GetAxisRaw("Vertical");

টাইম

  • গেইম শুরু থেকে বর্তমান পর্যন্ত অতিবাহিত সময় (সেকেন্ড)

    float timePassed = Time.time;
  • গেইমের বর্তমান টাইম স্কেল (১ = নরমাল)

    float currentTimeScale = Time.timeScale;
  • টাইম স্কেলের মাধ্যমে গেইম থামানো

    Time.timeScale = 0;
  • পূর্বের ফ্রেম সম্পন্ন হতে অতিবাহিত সময়

    float timePassedForLastFrame = Time.deltaTime;
  • ফিজিক্স ইভেন্ট সম্পন্ন হতে অতিবাহিত সময়

    float timePassedForPhysics = Time.fixedDeltaTime;

কোরুটিন

  • কোরুটিনের উদাহরন

    IEnumerator WaitOneSecond()
     {
     yield return new WaitForSeconds(1.0f);
     Debug.Log("1 Second Passed...");
     }
  • কোরুটিন কল করা

    StartCoroutine(WaitOneSecond());
  • মেথডের নাম দ্বারা কোরুটিন কল করা

    StartCoroutine("WaitOneSecond");
  • ভ্যারিয়েবলে কোরুটিন স্টোর করা

    IEnumerator myCoroutine = WaitOneSecond();
  • ভ্যারিয়েবল থেকে কোরুটিন কল করা

    StartCoroutine(myCoroutine);
  • স্টোর করা কোরুটিন বন্ধ করা

    StopCoroutine(myCoroutine);
  • মেথডের নাম দ্বারা কোরুটিন বন্ধ করা

    StopCoroutine("myCoroutine");
  • সকল কোরুটিন বন্ধ করা

    StopAllCoroutines();
  • পরবর্তী Update() পর্যন্ত অপেক্ষা করা

    yield return null;
  • পরবর্তী FixedUpdate() পর্যন্ত অপেক্ষা করা

    yield return new WaitForFixedUpdate();
  • বর্তমান ফ্রেমের সব এক্সিকিউট হওয়া অপেক্ষা করা

    yield return new WaitForEndOfFrame();
  • কিছু সময় অপেক্ষা করা (টাইম স্কেল অনুযায়ী)

    yield return new WaitForSeconds(2f);
  • কিছু সময় অপেক্ষা করা (Unscaled টাইম অনুযায়ী)

    yield return new WaitForSecondsRealtime(2f);
  • অন্য কোনো কোরুটিনের জন্য অপেক্ষা করা

    yield return StartCoroutine(AnotherCoroutine());
  • কোনো কন্ডিশনের জন্য অপেক্ষা করা

    yield return new WaitUntill(() => fatherInLaw.isAgreed == true);

ইউজার ইন্টারফেইস

  • প্রয়োজনীয় ডিরেক্টিভ

    using UnityEngine.UI;
  • গেইম অবজেক্ট থেকে টেক্সট কম্পোনেন্ট নেওয়া

    Text myText = go.GetComponent<Text>();
  • গেইম অবজেক্ট থেকে ইমেজ কম্পোনেন্ট নেওয়া

    Image myImage = go.GetComponent<Image>();
  • টেক্সটের ভ্যালু পরিবর্তন

    myText.text = "This is a Text."
  • ফ্লোট/ইন্টিজার টেক্সটে ভ্যালু হিসেবে

    myText.text = myFloat.ToString(); অথবা myText.text = myFloat + "";
  • দশমিকের পর ৩ ঘর পর্যন্ত সংখ্যা দেখাতে (12.123)

    myText.text = myFloat.ToString("0.000");
  • ১০০ এর ছোট সংখ্যার আগে ০ দেখাতে (006)

    myText.text = myFloat.ToString("000");
  • ইমেজের কালারের আলফা ভ্যালু পরিবর্তন (0~1, 0 ট্রান্সপ্যারেন্ট)

    myImage.color = new Color(myImage.color.r, myImage.color.g, myImage.color.b, 0.1f);

ম্যাথ ফাংশন

  • পরমমান বাহির করার জন্য

    Mathf.Abs(x)
  • সর্বনিম্ন এবং সর্বাধিক মানের মধ্যে সীমাবদ্ধ করা

    Mathf.Clamp(value, min, max)
  • দুটি বা ততোধিক সংখ্যার মধ্যে বড় সংখ্যা বাহির করার জন্য

    Mathf.Max(x,y)
  • দুটি বা ততোধিক সংখ্যার মধ্যে ছোট সংখ্যা বাহির করার জন্য

    Mathf.Min(x,y)
  • x টু দা পাওয়ার y এর জন্য

    Mathf.Pow(x,y)
  • বর্গমূল বাহির করার জন্য

    Mathf.Sqrt(x)
  • দশমিকের উপরের দিকের কাছের পূর্নসংখ্যা বাহির করার জন্য

    Mathf.Ceil(x)
  • দশমিকের নিচের দিকের কাছের পূর্নসংখ্যা বাহির করার জন্য

    Mathf.Floor(x)
  • ২ এর গুনিতক কিনা বাহির করার জন্য

    Mathf.IsPowerOfTwo(x)

ডেভসংকেত সম্পর্কে

ডেভসংকেত এর লক্ষ্য হচ্ছে বাংলাতে একটা বড় চিটশিটের ভান্ডার গড়ে তোলা। এটা সম্পূর্ণ স্বাধীন এবং ওপেন সোর্স গিটহাব অর্গানাইজেশন।

স্পন্সর