Toplanabilir Nesneler
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 17 / 63.
Bir eşya alma nesnesi, kendi betiğine sahip bir tetikleyicidir. Bir şey içeri girdiğinde, eşya alma nesnesi bunun oyuncu olup olmadığını kontrol eder, etkisini aktarır ve kendini yok eder. Oyuncunun betiği sonucu saklar ve bunun için herkese açık bir yöntem sunar. Bu sağlık paketi, Health betiğine sahip olan her şeyi iyileştirir:
// HealthPack.cs
public int amount = 25;
void OnTriggerEnter(Collider other)
{
if (other.TryGetComponent(out Health health) && health.hp < 100)
{
health.Heal(amount);
Destroy(gameObject);
}
}// Health.cs, oyuncunun üzerinde
public int hp = 50;
public void Heal(int amount)
{
hp = Mathf.Min(hp + amount, 100);
Debug.Log("HP: " + hp);
}other.TryGetComponent(out Health health), pakete doğru kayan bir sandık için false döndürür; böylece paketi yalnızca Health betiğine sahip bir nesne alabilir ve sağlığı tamamen dolu bir oyuncu paketi daha sonra almak üzere bırakır. Paket oyuncuyu other üzerinden bulur; bu nedenle hiçbir paketin Inspector referansına ihtiyacı yoktur ve bir seviyede bunlardan elli tane bulunabilir. Başka bir betik çağırdığı için Heal public olarak tanımlanmıştır ve 100 sınırı, hp'nin sahibi olan tek yerde, Health'te bulunur. Destroy(gameObject) paketi kaldırır; Destroy(other.gameObject) ise oyuncuyu kaldırır.
Görev
KolayOyuncu bir Blaster taşır: ammo (başlangıçta 4) ve maxAmmo (10). Ok tuşları oyuncuyu hareket ettirir, Boşluk tuşu ateş eder ve her ikisi de kaydedilir. Mermi sandıklarının cephaneyi yenilemesini sağla:
Blaster.csdosyasında, genel birint AddAmmo(int amount)metodu ekle.amountdeğerindenmaxAmmosınırını aşmadan sığan miktarı alır,Ammo: 7gibi yeni toplamı kaydeder ve aldığı miktarı döndürür.AmmoCrate.csdosyasında, oyuncu bir sandığa girdiğinde sandığınamountdeğerini Blaster'a sun ve aldığı miktarı çıkar. Artık boş olan sandık kaldırılır; içinde cephane kalan sandık ise daha sonra tekrar ziyaret edilmek üzere kalan miktarla durur.
İlk sandıkta 3, ikincisinde 5 cephane bulunur. Play'e bas, sağa yürü, birkaç el ateş et ve ikinci sandığa geri yürü, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class AmmoCrate : MonoBehaviour
{
public int amount = 3;
void OnTriggerEnter(Collider other)
{
// Oyuncunun Blaster'ı alabildiği kadarını alır; sandık kalanını tutar ve boşalınca kaybolur
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Fizik ve Oynanış bölümündeki tüm dersler
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir Duvar