Birinchidan, raqib vazifasini bajaradigan ob'ektni yarating. Raqibingizga dushman kunini bering.
Agar raqib va raqam to'qnashsa, teg mantiqiy bo'ladi, chunki skript faqat dushman tegiga ega bo'lgan narsalar raqib sifatida tegishli ekanligini bildirishi mumkin.
"Dushman" deb nomlangan C # skriptini yarating.
Visual Studio'da skriptni oching. Avvaliga raqibga bitta kerak Qattiq jism- Komponent:
private rigidbody2D rigidbody;
Endi biz uyg'onish funktsiyasiga muhtojmiz. U boshlanishidan bir oz oldin faollashadi.
bekor uyg'onish ()
{
Rigidbody = GetComponent ();
}
Endi Unity -da Rigidbody2D komponentini raqibga qo'shing.
Endi yangi skriptni raqibga torting.
Raqibning harakati
Endi siz raqibning tezlikka qarab ma'lum bir yo'nalishda harakatlanishini xohlaysiz:
Bizga kerak: shaxsiy suzish tezligi
ommaviy bo'sh harakat (Vektor 2 yo'nalishi)
{
body.velocity = yangi Vector2 (yo'nalish.x * tezlik, tana.velocity.y);
}
Shunday qilib, inspektorda shaxsiy suzuvchi maydon paydo bo'ladi, uning oldiga qo'ying: [SerializeField]
Raqibning yo'nalishi o'zgarishi kerak:
Bizga kerak:
xususiy Vector2 harakatiDirection;
Endi quyidagilar aniqlandi:
motionDirection = yo'nalish;
Yo'nalish.x ni harakatDirection.x bilan almashtirasiz.
Yo'nalishni o'zgartirish uchun yangilanish funktsiyasi kerak:
Ko'chirish (harakat yo'nalishi);
Bir yo'nalishda harakat qilgandan so'ng, raqib boshqa tomonga qaytadi.
Raqiblar bilan to'qnashuv
Bundan tashqari, raqib "to'qnashuvni kashf qilishi" kerak.
xususiy bo'shliq OnCollisionEnter2D (Collision2D to'qnashuvi)
{
agar (collision.gameObject.CompareTag ("Dushman"))
{
motionDirection * = -1f;
}
Uyg'onish funktsiyasida quyidagilarni motionDirection sifatida kiriting:
motionDirection = Vector2.right;
Unga hali ham kerak Kollayderi. Mos keladigan 2D kollayderni qo'shing.
Raqibning yuqori qismiga 2 -chi kichik kollayder qo'shing. Ikkinchi kollider ham tetik bo'lishi kerak. Kollayder o'yinchi sakrab tushganda raqibni yo'q qilish uchun mo'ljallangan.
Dushmanlar tug'ilish
Ierarxiya oynasida sichqonchaning o'ng tugmachasini bosib, bo'sh ob'ektni yarating va uni chaqiruvchi deb nomlang.
Urug'ning yo'nalishiga qarab, dushmanlar paydo bo'ladi. Keyin bizga SpawnerScript kerak.
Unda siz raqiblarning tashqi ko'rinishini aniqlaysiz.
Avval bizga kerak:
[SerializeField]
SerializeField orqali prefabrikalar to'g'ridan -to'g'ri urug'lantiruvchi joyda paydo bo'ldi.
shaxsiy dushman [] dushmanlar;
Shuningdek, sizga o'zgaruvchi kerak bo'ladi:
[SerializeField]
maxsus float spawnTimeDelay, startSpawnDelay;
Bu bilan biz urug'lanish vaqtini va urug'lanish oralig'ini o'rnatdik.
Bizga ham kerak:
public bool tugallandi;
U urug'lantiruvchi uchun oxirgi raqibni belgilaydi. O'yin menejeri urug'lantiruvchilarning "nazorati" ga ega. Tugallangan bo'lim sahnada boshqa dushmanlar qolmaganda va darajaga yuborilgan barcha dushmanlarning urug'lari bo'lmasa, daraja yakunlanishini bildiradi.
Endi dushmanlar tug'ilishi uchun korutin kerak.
Raqiblar ham ma'lum yo'nalishda harakat qilishlari kerak.
Nihoyat, urug'lantirish tugallanganligini tekshirish kerak.
Koroutin uchun IEnumorator talab qilinadi. Unity koroutinlarni boshqaradi fon. Ular shuningdek, har bir kadrda joy oladi:
xususiy IEnumerator yumurtasi ()
Endi tizimga raqib paydo bo'lishi uchun ma'lum soniya kutish aytiladi:
rentabellikni qaytarish yangi WaitForSeconds ();
Biz startSpawnDeleyni kutmoqdamiz:
rentabellik yangi WaitForSeconds (startSpawnDelay);
Vaqt ma'lumotlari uchun bizga kerak:
uchun (int i = 0; i <uzunlik; i ++)
Har bir raqib ma'lum vaqtdan keyin ma'lum sonni qaytarishi kerak.
Shuning uchun ham: dushmanlar bor.
uchun (int i = 0; i <dushmanlar. Uzunlik; i ++)
Endi raqibga havola yaratish kerak:
Enemy dushmanInstance = Tezkor (dushmanlar [i], transform.position);
Transform.position tizimga raqibning paydo bo'lishi kerakligini aytadi.
Quaternion.identlik aylanishni bildiradi.
Dushman dushmani Instance = Tezkor (dushmanlar [i], transform.position, Quaternion.identity);
Raqibning harakatini batafsilroq aniqlash mumkin:
dushmanInstance.Harakat qilish (o'ngga aylantirish);
Biz rentabellik rentabelligini yangi WaitforSeconds (SpawnTimeDelay) qo'shamiz; yana bir bor, bu safar SpawnTimeDelay bilan.
Bu shuni anglatadiki, har safar dushman paydo bo'lganda, Unity keyingi vaqtni kutadi.
Nihoyat, tizim yumurtlama tugaganligini tekshirishi kerak:
tugallangan = i> = dushmanlar.Uzunligi - 1;
Nihoyat, Coroutnie -ni boshlash kerak:
bekor boshlash ()
{
StartCoroutine (Spawn ());
}
Urug'lantirish uchun oxirgi skript quyidagicha bo'lishi kerak.
Ilova qilingan tuxum skriptida siz endi tug'ilish chastotasini o'rnatishingiz mumkin:
Endi siz raqiblarni Spawner skriptiga sudrab tashlab qo'yishingiz mumkin: