我一直试图在不同类别中完美构建我正在研究的项目,同时最大程度地继承的好处。但是到目前为止,这给了我更多的头痛而不是好处。
考虑一下:
public class SuperClass : MonoBehaviour
{
[SerializeField] protected Camera _camera;
}
还有这个
public class SubClass : SuperClass
{
}
我尝试了一下,团结似乎告诉我,我必须将摄像机分配给SuperClass游戏对象和子类游戏对象,这对我来说没有意义。
如何为SuperClass.cs分配摄像机,然后由其所有子类使用并共享摄像机?
谢谢!
答案 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
{
}