如何将C#对象与Unity游戏对象相关联?

时间:2017-06-19 21:34:21

标签: c# oop object unity3d

我理解Unity在基于组件的方式中使用C#脚本,但在很多情况下这种方法效果不佳。

这是一个例子:说我有一个炮塔类和一个激光类。它们都继承自实现Shoot()方法的IShootable接口。我想循环遍历场景中的所有IShootable对象并调用Shoot()。听起来很简单,但我不一定要将这些脚本作为组件添加到游戏对象中,而是将它们实例化为传统的C#方式:Turret t1 = new Turret();

基本上,当我实例化C#对象时,我想实例化一个统一游戏对象并对它进行几乎相同的处理。

我相当业余,我知道没有完美的答案。我只是想要一种一致的方法来处理这种混乱并使其不那么混乱。

谢谢!!!

2 个答案:

答案 0 :(得分:2)

如果您希望对象存在于场景中,则必须为GameObject。没有其他选择。

现在,它完美地发现你的Turret和Laser对象继承自MonoBehaviour,但它们必须与场景中 的东西相关联,不知何故。而场景中唯一存在的是GameObjects。

  • 选项A:制作一个MonoBehaviour脚本,其中包含Turret和/或Laser作为该行为脚本的属性。循环遍历场景中的所有游戏对象并获取它们的MB组件并在其上调用Shoot(),它为其封装的Turret或Laser对象调用Shoot()。

  • 选项B:使您的Turret和Laser脚本实例化并存储对其关联GameObject的引用。在一个时尚之后,我在我正在进行的一个游戏中这样做。

答案 1 :(得分:0)

我冒昧地假设你在谈论一个观察者模式。 链接:https://msdn.microsoft.com/en-us/library/ee817669.aspx 并使用Unity3d操作和委托: 链接:https://unity3d.com/ru/learn/tutorials/topics/scripting/input-actions-and-delegate-pattern 或使用Unity3d Evetns。 我没有足够的声誉来插入另一个链接,但你可以在Unity网站上找到一个教程