Küçük Bileşenler
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 1 / 64.
Bir GameObject, bileşenlerin bir listesidir ve yazdığın her betik bu bileşenlerden bir tane daha ekler. Unity oyunları, her betiğe bir görev verilip bir nesneye birkaç betik eklenerek oluşturulur. Oyuncunun hareketi, ateş etmesi ve can puanları tek bir PlayerController içinde bulunabilir; ancak bunlar Mover, Shooter ve Health adlı üç bileşen olduğunda, her biri başka nesnelere de eklenebilir:
public class Health : MonoBehaviour
{
public int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}- Oyuncu: Mover, Shooter, Health
- Taret: Shooter, Health
- Kasa: Health
Düz C# sınıflarıyla bunun yerine bir ağaç oluşturabilirsin: Character, ardından ShootingCharacter : Character, ardından Player : ShootingCharacter. Bir taret ateş eder ama asla yürümez; bir kasa ise yalnızca kırılır. Bu yüzden her yeni nesne türü, ağacı yeniden şekillendirmek anlamına gelir. Bileşenlerle yeni bir nesne türü, Inspector'da bir araya getirilen mevcut betiklerin yeni bir karışımıdır ve her betiğin burada kendine ait değerleri olabilir: bir nesnede yavaş bir Mover, diğerinde hızlı bir Mover.
Aynı nesnedeki bileşenler Transform'unu paylaşır, bu yüzden her biri yalnızca sahip olduğu kısmı değiştirmelidir. transform.position += ile x ve z'ye ekleme yapan bir Mover, y'yi olduğu gibi bırakır; böylece aynı nesnedeki bir Jumper yüksekliği yine değiştirebilir. Konumun tamamını new Vector3(x, 0.5f, z) olarak ayarlayan bir Mover ise her karede y'yi eski hâline getirip zıplamayı iptal eder.
Görev
KolayHer betik tek bir işi yapacak şekilde Boat.cs dosyasını böl.
- Yukarı aşağı sallanma hareketini
Bobberiçine taşı:startY,Start()içinde ayarlansın; sallanma hareketi, kendine aitheightvespeedkullanılarakUpdate()içinde gerçekleşsin. - Yanıp sönme hareketini, kendine ait bir zamanlayıcıyla birlikte
Blinkeriçine taşı. Boatiçindeki bu iki işi ve bunlara ait alanları sil; böylece yalnızca tekneyi yönlendirsin.
“Oyna” düğmesine bas: ördek yukarı aşağı sallanır, şamandıra yanıp söner ve tekne yönlendirilir. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
// Tek bir betik, üç görev: yönlendirme, yukarı aşağı sallanma ve yanıp sönme.
public class Boat : MonoBehaviour
{
public float speed = 3f;
public float bobHeight = 0.1f;
public float bobSpeed = 2f;
public Renderer lamp;
public float blinkInterval = 0.5f;
private InputAction moveAction;
private float startY;
private float blinkTimer;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
startY = transform.position.y;
}
void Update()
{
// yönlendirme
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;
// yukarı aşağı sallanma
Vector3 p = transform.position;
p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
transform.position = p;
// yanıp sönme
blinkTimer += Time.deltaTime;
if (blinkTimer >= blinkInterval)
{
blinkTimer -= blinkInterval;
lamp.enabled = !lamp.enabled;
}
}
}
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground