Unity 3D:游戏对象交互

时间:2015-10-28 19:00:00

标签: c# unity3d unityscript

假设我们有一个第一人称角色和几个NPC AI。第一人称角色应该能够与NPC AI交谈(通过对话服务)。我的问题是:我应该如何将两个游戏对象(FPC和NPC)相互“连接”?

所以他基本上可以四处走动并与他们交谈,然后他们回答一些问题,第一个人可能会选择一个选项。

我在这里看到几个选项:

  1. 将“公共变量”添加到“第一人称角色”。这个公众 变量将持有NPC AI。所以人大AI和第一人称 角色可以通过两个类的功能相互交谈。
  2. 添加一个实现观察者模式的“DialogService”类。 因此会有几个发布者和订阅者。我的问题在这里 是如何将NPC和第一人称角色相互联系起来
  3. 也许你有更好的选择?

1 个答案:

答案 0 :(得分:3)

如果你正在寻找一个简单的解决方案,我可以提供:

在角色GameObject的内部有另一个GameObject被叫,让我们说," Dialog Collider"。将碰撞器组件添加到该游戏对象,使其(碰撞器)成为触发器。另外,我建议你让对撞机成为一个半径更大的圆柱体,这样你就可以进入对话框而不会与另一个角色发生碰撞。

添加一个脚本,你的玩家角色会在" Dialog Collider"与另一个同名/标签的GameObject进行碰撞。在这一点上,我认为你对所有游戏角色都有相同的设置:他们都应该有一个" Dialog Collider"主GameObject内部的GameObject,如果他们有一个对话框选项,那就是。

这样你就可以将碰撞检测留给UnityEngine而不是每帧检查它。

另外,我建议制作一个通用的Dialog脚本;使它成为一个抽象类,您可以继承它来覆盖某些方法,这样您就可以从一开始就拥有所有基本功能,并且可以在以后更改/扩展NPC的行为。

或者创建一个IDialogCharacter接口,并为每个类手动实现方法和对话框;如果您更喜欢组合而不是继承,请使用多态来检查IDialogCharacter接口。

作为连接部分 - 当碰撞开始时,你的玩家角色将能够获取另一个角色的脚本(首先获得碰撞的GameObject,然后是脚本组件)并请求对话从另一个角色开始或获取来自另一个角色的一些数据对象并启动对话框。