【发布时间】:2017-06-19 21:34:20
【问题描述】:
我了解 Unity 以基于组件的方式使用 C# 脚本,但在很多情况下这并不能很好地工作。
这是一个例子:假设我有一个炮塔类和一个激光类。它们都继承自实现了 Shoot() 方法的 IShootable 接口。我想遍历场景中的所有 IShootable 对象并调用 Shoot()。听起来很简单,但我不一定想将这些脚本作为组件添加到游戏对象中,而是用传统的 C# 方式实例化它们:Turret t1 = new Turret();
基本上,当我实例化 C# 对象时,我想实例化一个统一的游戏对象并对其进行几乎相同的处理。
我相当业余,我知道对此没有完美的答案。我只是想要一种一致的方式来处理这种混乱并使其不那么混乱。
谢谢!!!
【问题讨论】:
-
除非您正在编写基于文本的冒险游戏,否则炮塔必须从某个地方射击?为什么不让炮塔成为那个物体射击的一个组成部分。但是,除了因为您不再使用组件系统之外,您的计划没有任何问题,您有责任自己在某处的
List<IShootable>中跟踪所有 IShootable 对象(就像您在普通 C# 中一样)并 foreach该主列表并调用拍摄。 -
我明白你在说什么。您可能是对的,没有理由不使用 Unity 的组件系统。也许引擎不适合我的风格(?)
-
“基本上,当我实例化 C# 对象时,我想实例化一个统一的游戏对象并对其进行几乎相同的处理。”这是完全没有意义的。要实例化一个游戏对象,请实例化一个游戏对象。
-
它可能不“适合一个人的风格”,但没有其他可能的方式可以让行为附加到物理对象的 ECS .. 可以工作。