#c# #unity3d
#c# #unity-игровой движок
Вопрос:
Я пытаюсь создать разные HP для разных врагов, где я хочу изменить значение дочернего класса, вызвав функцию из его родительского класса. Таким образом, я могу просто использовать функции родительского класса, но HP будет разным для разных типов врагов. Я новичок в Unity, поэтому не уверен, как это сделать.
Вот мои коды:
Enemy.cs (родительский)
public class Enemy : MonoBehaviour
{
public int hp = 30; // Need to get this value from Child class
protected Animator anm;
protected Rigidbody2D rb;
protected virtual void Start() {
anm = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
public void Hurt() {
rb.velocity = Vector2.zero;
anm.SetTrigger("hurt");
hp -= 10;
if (hp <= 0)
{
Death();
}
}
public void Death() {
anm.SetTrigger("death");
}
}
Guard.cs (дочерний)
public class Guard : Enemy
{
public int hp = 50;
protected Animator anm;
protected Rigidbody2D rb;
protected override void Start()
{
base.Start();
coll = GetComponent<Collider2D>();
}
}
Как я могу сделать hp
значение разным для разных врагов в Unity?
Ответ №1:
Не скрывайте hp
(и другие поля / свойства) из базового класса в производные.
Они уже находятся в родительском классе и, следовательно, присутствуют в производном
В Start()
вы можете добавить hp = 50;
Enemy.cs (родительский)
public class Enemy : MonoBehaviour
{
public int hp = 30; // Need to get this value from Child class
protected Animator anm;
protected Rigidbody2D rb;
protected virtual void Start() {
anm = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
public void Hurt() {
rb.velocity = Vector2.zero;
anm.SetTrigger("hurt");
hp -= 10;
if (hp <= 0)
{
Death();
}
}
public void Death() {
anm.SetTrigger("death");
}
}
Guard.cs (дочерний)
public class Guard : Enemy
{
// remove the fields/properties already present in Enemy
protected override void Start()
{
base.Start();
hp = 50; // <------------------- Set the value for Guard here
coll = GetComponent<Collider2D>();
}
}
Комментарии:
1. Большое вам спасибо. Это сработало. Вы правы, что удалили поля / свойства, уже присутствующие в Enemy, я действительно сделал это в своем реальном скрипте, забыл удалить здесь. Итак, теперь, если я создам другой дочерний класс
Enemy
amp; если я хочу, чтобы hp этого класса был равен 100, я просто изменю его наStart()
? Повлияет ли это на другой дочерний класс?2. Нет, это не повлияет на другого дочернего класса. Представьте, что у вас есть дочерний класс, он наследует некоторые вещи от вас (генетику). Однажды ваш ребенок решил, что у него будут зеленые волосы. У всех ли ваших дочерних классов будут зеленые волосы? Единственный случай, когда это может повлиять на весь производный класс, — это если вы что-то измените
static