Я пытаюсь наследовать класс, который в NetworkBehaviour, но всякий раз, когда я наследую родительский класс (скрипт), он перестает работать.
Я пробовал это:
using UnityEngine;
using UnityEngine.Networking;
public class FireFighter : NetworkBehaviour
{
private void Update()
{}
private void Move()
{}
private void break()
{}
}
public class FireCaptain : FireFighter
{
public override void Move ()
{
base.Move();
Debug.Log("The captainMoved.");
}
}
Короче говоря, скрипт FireFighter работает хорошо, но всякий раз, когда я его наследую, он перестает работать. Мне нужно немного помощи здесь. Как я могу наследовать класс, который наследует Networkbehaviour.
Кроме того, можете ли вы дать определение «перестает работать»?
Будьте осторожны с именами ваших методов! break
— это ключевое слово, которое не следует использовать в качестве имени метода.
Затем вы определили
private void Move()
в вашем базовом классе FireFighter
=> в FireCaptain
нельзя
public override void Move ()
virtual
или abstract
, поэтому вы вообще не можете использовать override
.private
на public
) в переопределении.private
, поскольку он может быть вызван только самим реализующим классом.Так
К 2.) и 3.) Если вы хотите, чтобы он был base.Move();
в подклассе, он также должен быть public
уже в базовом классе. Или вы можете использовать public
, чтобы доступ был только у базового класса и его наследников.
К 1.) Чтобы иметь возможность переопределить метод в вашем подклассе, он должен быть либо protected
, либо virtual
. Так сделай это
abstract
если вы хотите иметь реализацию в базовом классе, чтобы определить поведение по умолчанию и сделать его только необязательный, чтобы переопределить его. подобно
// subclasses don't have to implement and override
// this method but can. Also the base.Move(); is optional
public virtual void Move()
{
Debug.Log("You might want to override this to implement a movement");
}
virtual
если вы не хотите иметь реализацию в базовом классе и хотите сила подклассы для реализации этого, например. подобно
// subclasses will throw a compiler error if they
// do not implement this method
// (without base.Move(); since hte base has no implementation)
public abstract void Move();
Пожалуйста, прочитайте информацию, связанную с тегами, прежде чем использовать их в своем вопросе, чтобы убедиться, что вы не используете их неправильно.