C#共享属性和字段继承

时间:2019-01-12 18:16:41

标签: c# unity3d inheritance

我一直试图在不同类别中完美构建我正在研究的项目,同时最大程度地继承的好处。但是到目前为止,这给了我更多的头痛而不是好处。

考虑一下:

public class SuperClass : MonoBehaviour
{
    [SerializeField] protected Camera _camera;
}

还有这个

public class SubClass : SuperClass
{

}
  • 两个脚本都附加到场景中的不同游戏对象上。
  • 要通过在检查器中拖动来分配摄像机

我尝试了一下,团结似乎告诉我,我必须将摄像机分配给SuperClass游戏对象和子类游戏对象,这对我来说没有意义。

如何为SuperClass.cs分配摄像机,然后由其所有子类使用并共享摄像机?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

由其所有子类共享

只能通过使用“静态”(静态变量或单例)来实现类共享。

一种解决方法可能是

public class SubClass :SuperClass 
{
     [SerializeField] Camera camera;

     void Awake()
     {
         if(camera!=null)
         {
             _camera=camera;
         }
     }

    // Start is called before the first frame update
    void Start()
    {
        camera=_camera;
    }
}

要进一步扩展解决方案,您可以编写编辑器脚本或仅从代码中获取摄像机。

答案 1 :(得分:0)

您需要在某个地方创建公共静态Camera属性,并使用property在代码中引用它:

public static class StaticValues
{
    public static Camera Camera {get; set;} 
}
public class SuperClass : MonoBehaviour
{
    [SerializeField] protected Camera _camera
    {
        get
        {
            return StaticValues.Camera;
        }
        set
        {
            StaticValues.Camera = value;
        }
    }
}
public class SubClass : SuperClass
{

}