Цел:Създайте самонасочваща се атака, която следва врага

Първото нещо, което искаме да направим, е да създадем нов скрипт и да го прикачим към избрания от нас спрайт.

Първото нещо, което искаме да направим, е да намерим игрови обекти с етикет Enemy в началото и искаме да вземем твърдото тяло от самонасочващата се атака.

След това нека да продължим и да създадем две променливи, които ще инициализираме в start.

С тях ще съхраняваме Mathf.Infinity с променливата distanceToClosestEnemy, така че да имаме положителна стойност за безкрайност. Използваме Mathf.Infinity, за да съхраняваме по същество голямо число, когато няма число, по-голямо от безкрайността. По същество бихме могли да използваме стойност като 1000, ако знаехме например, че нашият враг няма да е по-далеч от това. Но за това ще използваме Mathf.Infinity.

Втората променлива ще съхрани най-близкия ни враг, когато стигнем до тази функция, но в началото ще я съхраним като нула.

След това нека създадем нашия метод, който ще има foreach цикъл, преминаващ през всички врагове и също така ще намерим игрови обекти с етикет в началото на този метод, така че ако враг е унищожен, може да търси нов.

Уверете се, че сте поставили нулева отметка на врага. След това ще създадем променлива за локално разстояние, използвайкиVector3.Distanceкоято ще съхранява разстоянието между насочващата се атака и врага на екрана.

Сега ще използваме онези променливи, които инициализирахме в Старт. Ще създадем условие, така че ако разстоянието до врага е по-малко от променливата Mathf.Infinity, която създадохме, тогава тези две променливи ще бъдат равни една на друга и след това най-близката променлива на врага (която ние стана нула в началото) сега е врагът от _enemies масива.

След това можем да използваме bool, за да заявим, че най-близкият враг е намерен. Което ще използваме в следващия метод в следващата стъпка. Това е всичко за този метод.

Първият метод намери врага, сега трябва да създадем метод, който кара нашата самонасочваща се атака да се придвижи към врага. Нека наречем този метод MoveToEnemy. В този метод ще null проверим най-близкия враг и след това ще създадем условие за най-близкия открит враг bool.

Ще създадем Вектор3, който ще съхранява посоката, към която ще се движи нашата атака. След това ще го нормализираме. Нормализирането му ще запази същата посока, но ще направи магнитуда стойност 1.

След това ще вземем кръстосаната стойност на двата вектора и ще ги съхраним в променлива. Не забравяйте да добавите ос z в края на функцията, когато създавате променливата float, за да я направите правилно плаваща. След това ще използваме твърдото тяло и ще манипулираме ъгловата скорост, за да създадем въртенето, и скоростта, за да създадем неговата скорост . Използвам отрицателна стойност за количеството на завъртане, в противен случай се движи в обратната посока на врага.

Накрая ще създадем изявление else, така че ако не можем да намерим враг, самонасочващата атака ще продължи да се движи само в посока напред и ще се уверим, че ъгловата скорост е зададена на нула, в противен случай той ще продължи да се върти в рамките на играта, докато случайно не удари цел.

И накрая, не забравяйте да извикате HomingMissile в update и метода MoveTowardsEnemy в FixedUpdate, тъй като ние прилагаме физика искаме да направим всичко възможно да използваме FixedUpdate за това.

Надявам се, че сте научили как да създадете самонасочваща се ракета! Това работи страхотно за мен, надявам се да работи и за вас!

Тази игра може да се играе на itch.io. Ще се опитам да го актуализирам често. Пуснете го и ми кажете какво мислите!