因此,我已将 绑定CombatController
到一个名为“godObject”的对象。在Start()
方法中,我调用init()
了其他类上的函数。我这样做是为了控制对象初始化的顺序,因为例如,角色控制器依赖于正在初始化的网格控制器。
快速图:
-------------------- calls
| CombatController | ----------> CameraController.init();
-------------------- |
| ---> GridController.init();
|
| ---> CharacterController.init();
所以,现在我有一个小问题。我在每个控制器中都需要多个属性。目前,我已将所有内容绑定到战斗控制器本身。这意味着,在每个控制器中,我必须通过GameObject.Find("godObject).GetComponent<CombatController>()
. 老实说,我认为这不是一个好的设计。
我现在的想法是创建一个BaseCombatController
扩展的类MonoBehavior
,然后让所有其他类(例如GridController
,CharacterController
等等)扩展BaseCombatController
. 它可能看起来像这样:
public class BaseCombatController : MonoBehaviour
{
public GameObject activePlayer;
public void setActivePlayer(GameObject player) {
this.activePlayer = player;
}
... more stuff to come ...
}
这样,我可以访问activePlayer
任何地方,而无需创建CombatController
. 但是,我不确定这是否没有可能的副作用。
那么,一个简单问题的大量文本,这样做安全吗?
我一直在 Unity 中使用继承。就像你在问题中所说的那样,诀窍是让你的基类继承单一行为。例如:
public class Base Item : Monobehavior
{
public string ItemName;
public int Price;
public virtual void PickUp(){//pickup logic}
//Additional functions. Update etc. Make them virtual.
}
这个类设置了一个项目应该做什么。然后在派生类中,您可以更改和扩展此行为。
public class Coin : BaseItem
{
//properties set in the inspector
public override void PickUp(){//override pickup logic}
}
在过去的一年里,我经常使用这种设计模式,目前正在零售产品中使用它。我会说去吧!Unity 似乎更喜欢组件而不是继承,但您可以轻松地将它们相互结合使用。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句