Menu
CoddyTech

Kesehatan dan Damage

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 53 dari 63.

Kerusakan melibatkan dua skrip. Skrip Health terpasang pada semua objek yang bisa terluka dan menyimpan poin kesehatannya, sementara apa pun yang menyebabkan kerusakan akan menemukan skrip itu dan memanggil method-nya. Berikut skrip Health untuk peti yang hancur setelah tiga kali terkena serangan, dan paku yang melukai apa pun yang mendarat di atasnya:

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Spikes : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Health health = collision.gameObject.GetComponent<Health>();
        if (health != null)
        {
            health.TakeDamage(1);
        }
    }
}

TakeDamage bersifat public, jadi skrip lain bisa memanggilnya, dan hanya kode ini yang mengubah hp. Paku, peluru, dan lava semuanya memanggil method yang sama, sementara skrip Health sendiri yang menentukan arti nilai 0: menghancurkan peti, mengakhiri permainan, atau memutar animasi kematian. Setiap skrip berada dalam file-nya sendiri, yang namanya sesuai dengan nama class-nya.

GetComponent<Health>() mengembalikan null untuk objek yang tidak memiliki Health, seperti lantai, jadi paku memeriksanya sebelum memanggil. TryGetComponent(out Health health) melakukan pencarian dan pemeriksaan dalam satu pemanggilan: method ini mengembalikan true dan mengisi health hanya jika Health tersedia.

challenge icon

Tantangan

Sedang

Senjata latihan menembak boneka dan ksatria berzirah. Script Shooter pada Gun sudah siap: tombol panah kiri dan kanan memutarnya, dan tombol Space menembakkan Bullet. Tulis dua script yang membuat tembakan memberikan dampak.

Health, pada Dummy dan Knight (Inspector mengatur hp dan armor):

  • Sebuah method publik TakeDamage(int amount): hp berkurang sebesar amount dikurangi armor, tetapi selalu berkurang setidaknya 1.
  • Setelah setiap tembakan mengenai sasaran, catat nama object dan sisa hp, seperti Dummy hp: 2.
  • Jika hp mencapai 0 atau kurang, hancurkan object tersebut.

Bullet, pada setiap peluru (Inspector mengatur damage ke 2):

  • Saat peluru mengenai sesuatu yang memiliki Health, panggil TakeDamage(damage) miliknya.
  • Apa pun yang dikenainya, termasuk dinding, hancurkan peluru tersebut.

Tekan Play, jatuhkan dummy dan knight, lalu tekan Periksa.

Coba sendiri

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 4;
    [SerializeField] private int armor = 0;

    public void TakeDamage(int amount)
    {
        // kurangi hp sebesar amount dikurangi armor (minimal 1), catat sisa hp, lalu hancurkan object saat hp mencapai 0
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Fisika dan Gameplay