জনপ্রিয় ইউনিটি গেইম ইঞ্জিনের প্রয়োজনীয় হট-কী এবং কোড স্নিপেট
প্যান টুল
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); }
প্রয়োজনীয় ডিরেক্টিভ
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)