继承自继承 networkBehviour 的 class

Inherits from a class that inherits networkBehviour

我正在尝试继承 NetworkBehaviour 中的 class,但每当我继承父 class(script) 时,它就会停止工作。

我试过这个:

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 的 class。

注意方法的命名! break 是关键字,不应用作方法名称。


然后你定义了

private void Move()

在你的基地classFireFighter

=> 在 FireCaptain 你不能做

public override void Move ()
  1. 因为它不是virtualabstract所以你根本不能使用override
  2. 即使您不能在覆盖中更改范围(从 privatepublic)。
  3. 并且由于它在您的子 class 中是 private 您甚至无法调用 base.Move(); 因为它只能由实现 class 调用本身。

所以

到 2.) 和 3.) 如果你想让它在子 class 中是 public 它也必须是 public 已经在基础 class.或者您可以使用 protected,这样只有基础 class 及其继承者可以访问。

至 1.) 为了能够在您的 subclass 中覆盖方法,它必须是 virtualabstract。那就做吧

  • virtual 如果你想在基础 class 中有一个实现来定义默认行为并使其仅 可选 覆盖它例如喜欢

    // 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");
    }
    
  • abstract 如果您不想在 class 基础上实现并且想要 force subclasses 来实现这个,例如喜欢

    // 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();