继承自继承networkBehviour

时间:2019-04-08 03:51:14

标签: c# unity3d networking unity-networking

我正在尝试继承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脚本运行良好,但是只要我继承它,它就会停止工作。我需要一些帮助。我该如何继承继承网络行为的类。

1 个答案:

答案 0 :(得分:1)

请谨慎使用方法的命名! break 是关键字,不应用作方法名称。


然后定义

private void Move()

在您的基类FireFighter

=>在FireCaptain中不能做

public override void Move ()
  1. 因为它不是virtualabstract,所以根本不能使用override
  2. 即使是这样,也无法在替代中将范围(从private更改为public)。
  3. 并且由于它是您子类中的private,您甚至无权调用base.Move();,因为它只能由实现类本身调用。

所以

至2)和3)如果要使其成为子类中的public,它也必须已经位于基类中public中。或者,您可以使用protected,以便只有基类及其继承者可以访问。

要1)要能够在子类中覆盖某个方法,它必须是virtualabstract。所以做到

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

    // 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,如果您不想在基本类中实现,而想强制子类来实现此功能,例如喜欢

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