درود مهمان گرامی! ثبت نام

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
چیز هایی که در یونیتی یاد گرفتم
#1
سلام؛
توی این تاپیک، نکات و کد های کاربردی رو که در مسیر یادگیری یونیتی یاد گرفتم رو اینجا قرار میدم تا بقیه راحت تر پیداش کنن...



1- در یونیتی 5، برای وارد کردن نیرو باید اول get component گذاشت به این صورت:
(مورد 8 رو هم بخونید!)

کد:
GetComponent<Rigidbody> ().AddForce (new Vector3 (0, 0, -120));

2- یه چیزی خوبی به نام RelativeForce هست که مثل اد فورس خالی نیست و اگر گیم آبجکت بچرخه باز هم نیرو از همون جهت اولیه (نسبت به گیم آبجکت) وارد میشه؛ به این صورت:

کد:
GetComponent<Rigidbody> ().AddRelativeForce (new Vector3 (0, 0, -120));

3- برای بستن بازی توی یونیتی اینو میشه استفاده کرد:

کد:
if(Input.GetKey(KeyCode.Escape)){
            Application.Quit();
        }

4- دکمه Escape به جای دکمه بک توی گوشی کار میکنه (توی گیم میکر Backspace هه)...

5- برای استفاده از شیب سنج گوشی میشه از Input.acceleration استفاده کرد و آخرش . و x یا y یا z استفاده کرد به این صورت مثلا:

کد:
transform.Rotate(new Vector3(0,Input.acceleration.x * 4,0));

6- برای جابجا شدن بین scene ها (صحنه ها. همون room ها در گیم میکر) به راحتی از کد زیر استفاده کنید:

کد:
Application.LoadLevel(نام صحنه مورد نظر);

7- برای ساخت دکمه در یونیتی میشه این فرآیند رو طی کرد که روش خوبیه:

یه کد ایجاد کن، داخلش دو تابع با اسمای خاص مثل "pressed" و "released" بساز. یه متغیر هم بساز (هر نوعی)، بعد داخل این تابع ها مقدار این متغیر رو عوض کن (0 و 1 یا a و b).
در آخر هم یه if بذار که بررسی کنه اگه اون متغیر 1 بود یعنی روی کلیک شده بود کار مورد نظر رو انجام بده.

کد رو ذخیره کن.

حالا برو توی محیط طراحی و آبجکتو انتخاب کن و خصوصیت event trigger رو بهش اضافه کن.
دکمه add new event type رو بزن و pointer down و up رو اضافه کن و داخلشون + رو بزن و داخل پایین-چپ کادر اون کدی که تابع های بالا توشه رو اضافه کن؛ بعد از منوی بالا-راست ش زیر منویی که اسم کد هست رو باز کن و از بین توابع، تابع مربوط به حالت (press یا release) رو انتخاب کن.


8- اگر جایی get component لازم شد (مثل اد فورس)، برای اینکه بازی سنگین نشه فقط یک بار کامپوننت رو بگیرین. اینجوری:

کد:
Rigidbody MyRigidbody;
void Awake()
{
      MyRigidbody = GetComponent<Rigidbody>();
}
void Update()
{
      MyRigidbody.AddForce(Vector3.right * 10f);
}


با تشکر از parhamic عزیز.


9- Lerp عملی هست که مثل move to position در گیم میکر عمل میکنه و شکل کلی استفاده ازش این شکلیه:

کد:
transform.Translate (Vector3.Lerp (Vector3.a, Vector3.b, 5f));

نحوه کار با این کد هم اینطوری هست که مثلا ما transform.translate شئ مون رو برابر کد بالا میکنیم و در ورودی اول مکان اولیه در قالب Vector3، در ورودی دوم مکان نهایی در قالب Vector3، و در ورودی سوم هم عدد float یی بین 1 و 0 قرار میدیم.
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط Mehrdad ، start777 ، fahimi
#2
(یونیتی نسخه 2017.1)

10 - برای گرفتن فاصله بین دو گیم آبجکت دو عدد متغیر GameObject بسازید و بعد از ریختن آبجکت ها در آن:

کد:
int fasele = Vector3.Distance (cube1.transform.position, cube2.transform.position);


10 - برای گرفتن زاویه بین دو گیم آبجکت دو عدد متغیر GameObject بسازید و بعد از ریختن آبجکت ها در آن:

کد:
int zavie = Vector3.Angle (cube1.transform.position, cube2.transform.position);
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط start777 ، fahimi
#3
12- میخواید راحت از روی یک Prefab بسازید؟ ابتدا یک متغیر GameObject بسازید و بعد از مقدار دهی، با این دستور از روش تولید کنید:

کد:
Instantiate (tir, transform.position, transform.rotation);
//اولی: نام اون گیم آبجکت هه
//دومی: مکان (در مثال از مکان خودِ ایجاد کننده استفاده میشه)
//سومی: زاویه اولیه (در مثال از زاویه خودِ ایجاد کننده استفاده میشه)

13- میخواید یدونه آبجکت رو از بین ببرید؟ ابتدا یک متغیر GameObject بسازید و بعد از مقدار دهی، با این دستور از روش پاک کنید:

کد:
Destroy (GameObject);
//نام گیم آبجکت^
Destroy (GameObject,2f);
//دومی مقدار تاخیر حسب بر حسب ثانیه^
Destroy (this.gameObject,2f);
//پاک کردن خود بعد از 2 ثانیه^
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط fahimi
#4
14- به جای ایونت های راحتِ برخورد گیم میکر، توی یونیتی باید همچین تابعی نوشت (آخه چراااااااااا؟!) :

کد:
void OnCollisionEnter(Collision col){
if (col.gameObject.name = "esm") {

//دستور بعد از برخورد

}
}

<!-- نکته نسبتا مهم: اگر از روی یک Prefab نمونه هایی در بازی ساختید، در انتهای نام آبجکت یک (Clone) قرار می گیرد. -->
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط fahimi
#5
15- برای کنترل سرعت بازی (ایجاد صحنه آهسته) از این کد استفاده کنید:

کد:
Time.timeScale = 0.3f;
//بازه بین 0 تا 1 هست؛
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط fahimi
#6
(یونیتی نسخه 2018.2)

16 - کد Application.LoadLevel دیگه منقضی شده و به جاش میتونید از SceneManager.LoadScene استفاده کنید (و باید کتابخونه ش رو هم فراخوانی کنید):

کد:
Using UnityEngine.SceneManagement;
.
.
.
SceneManager.LoadScene( naam e level);

17 - بازخوانی مرحله (ریست کردن مرحله) در روش های قدیم و جدید:

روش قدیم:
کد:
Application.LoadLevel(Application.loadedLevel);

روش جدید:
کد:
Using UnityEngine.SceneManagement;
.
.
.
SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex);
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط MiladKaydi ، Hamid1225 ، fahimi


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Star آموزش یونیتی از سایت یونیتی ali.z 0 751 25/4/1396، 03:49 عصر
آخرین ارسال: ali.z
  ترفند هایی در یونیتی aliheadari 1 804 28/10/1394، 12:02 عصر
آخرین ارسال: sajjad3011



کاربرانِ درحال بازدید از این موضوع: 1 مهمان