Nişan Al
Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 8 / 18.
Bir kule hedefiyle yüzleşmek için döner: kaidesinin üzerinde duran kulenin tamamı değil, namluyu taşıyan çocuk nesnesi olan başlığı. Bir çocuk nesneyi döndürmek, onun altındaki her şeyi döndürür ve ebeveyn nesneyi olduğu gibi bırakır.
Düşmanlar başlıklardan daha alçakta yürür, bu yüzden başlıktan düşmanına doğru olan yön biraz aşağıyı gösterir ve bu yön boyunca dümdüz bakan bir başlık öne doğru eğilir. Yönün y değerini 0 yapmak, başlığı düz tutar; böylece başlık yalnızca dikey eksen çevresinde döner. Bir gemiyi takip eden deniz feneri lambası:
Vector3 toShip = ship.position - lamp.position;
toShip.y = 0f;
lamp.rotation = Quaternion.LookRotation(toShip);Quaternion.LookRotation(direction), o yöne bakan rotasyondur; dolayısıyla lamba anında gemiye döner. Bir kule başlığı ise belirli bir hızla dönmelidir: Rotation bölümündeki Quaternion.RotateTowards(from, to, maxDegrees), en fazla maxDegrees kadar döner ve saniyedeki derece cinsinden dönüş hızı Time.deltaTime ile çarpıldığında her kareye düşen miktarı verir.Görev
OrtaToweriçinde iki serileştirilmiş alan ekle:head(bir Transform) veturnSpeed(bir float, saniyede derece). ArrowTower prefab’ında bu alanlara ArrowHead alt nesnesi ve 270 atanır.- Kulenin bir hedefi varken, başlığı yalnızca dikey eksen etrafında, saniyede en fazla
turnSpeedderece olacak şekilde hedefe doğru döndür. - Hedef yokken başlığı olduğu gibi bırak.
Play’e bas, yolun yanına kuleler inşa et ve düşmanları takip edişlerini izle, ardından Check’e bas.
Kendin dene
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;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.