Unity的方式是,所有脚本(在您的情况下,特定于某种游戏对象的游戏代码)都派生自基类MonoBehaviour
,而基类本身又派生自与您的案例相关性更高的Component
类。您永远不会编辑GameObject类(也无法访问其代码)。
游戏对象负责包含所有这些Component
。从表面上讲,它还负责调用它们的相关功能(即Update
)。Unity使用反射来确定要调用的函数(请参见本页上的“可覆盖的函数”部分),但是您可能希望将它们虚拟化。
因此,您在Unity中使用的一种机制是按类型获取当前游戏对象(或其子对象)上的组件。有一些帮助器属性包装了一些常见的东西。例如,如果您要访问游戏对象的Transform
组件(以控制游戏对象的位置/旋转/比例),通常必须执行类似的操作this.GetComponent<Transform>().position
,但它们会将其包装到帮助程序this.transform.position
调用中。另一个常见的模式是访问当前游戏对象的Renderer
组件。因此,如果您想执行诸如更改当前游戏对象的材质的操作,则可以从另一个脚本执行诸如的操作this.renderer.material = someOtherMaterial
,并且您的游戏对象会适当更新。
在Unity中这种工作方式之一是设置他们的编辑器,以便您可以在场景中创建已经连接了组件的游戏对象。在Unity的情况下,所有游戏对象都有一个Transform
组件,但是它也可以包含内置类型,例如AudioListener
或Renderer
,它们可以实现您所期望的。或者,您可以添加自己的组件,这些组件可以执行您希望它们执行的任何操作。该编辑器还在组件上公开了公共/可序列化的字段,因此,如果您要使用相同的基本代码,而无需更改其他脚本,则可以更改一些魔术数字。
总而言之,它非常漂亮,我建议下载免费版本的Unity并尝试如何设置其脚本系统,这是您想要实现的目标的相当不错的概念证明。