Celuj
Lekcja 8 z 18 w kursie Gra Unity: Obrona wieżowa w Coddy.
Wieża obraca się w stronę celu: nie cała wieża, która stoi na swojej podstawie, lecz jej głowica, obiekt podrzędny, do którego przymocowana jest lufa. Obrócenie obiektu podrzędnego obraca wszystko, co znajduje się pod nim, a obiekt nadrzędny pozostawia bez zmian.
Wrogowie poruszają się niżej niż głowice, więc kierunek od głowicy do wroga wskazuje nieco w dół, a głowica skierowana dokładnie wzdłuż niego pochyliłaby się do przodu. Ustawienie wartości y kierunku na 0 utrzymuje go w poziomie, dzięki czemu głowica obraca się tylko wokół osi pionowej. Lampa latarni morskiej, która podąża za statkiem:
Vector3 toShip = ship.position - lamp.position;
toShip.y = 0f;
lamp.rotation = Quaternion.LookRotation(toShip);Quaternion.LookRotation(direction) to rotacja skierowana w tym kierunku, więc lampa natychmiast obraca się w stronę statku. Głowica wieży powinna obracać się z określoną prędkością: Quaternion.RotateTowards(from, to, maxDegrees) z rozdziału o rotacji obraca ją maksymalnie o maxDegrees, a prędkość obrotu w stopniach na sekundę pomnożona przez Time.deltaTime daje wartość obrotu dla każdej klatki.Wyzwanie
Średni- W
Towerdodaj dwa serializowane pola:head(Transform) iturnSpeed(float, stopnie na sekundę). Prefab ArrowTower przypisuje swoje dziecko ArrowHead i wartość 270. - Gdy wieża ma cel, obracaj głowicę w jego kierunku, tylko wokół osi pionowej, maksymalnie o
turnSpeedstopni na sekundę. - Gdy nie ma celu, pozostaw głowicę bez zmian.
Naciśnij Play, zbuduj wieże obok ścieżki i obserwuj, jak podążają za wrogami, a następnie naciśnij Check.
Spróbuj swoich sił
using UnityEngine;
public class Tower : MonoBehaviour
{
public int cost = 50;
public float range = 4f;
private Enemy target;
void Update()
{
target = FindTarget();
}
Enemy FindTarget()
{
Enemy nearest = null;
float nearestDistance = range;
foreach (Enemy enemy in Enemy.All)
{
float distance = Vector3.Distance(transform.position, enemy.transform.position);
if (distance <= nearestDistance)
{
nearest = enemy;
nearestDistance = distance;
}
}
return nearest;
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.