Unity 3D:游戏对象交互
本文关键字:对象 交互 游戏 3D Unity | 更新日期: 2023-09-27 18:19:37
假设我们有一个第一人称角色和几个NPC AI。第一人称角色应该能够与NPC AI对话(通过对话服务)。我的问题是:我应该如何将两个游戏对象(FPC和NPC)"连接"在一起?
所以他基本上可以四处走动,与他们交谈,然后他们回答一些问题,第一人称角色可能会选择一个选项。
我在这里看到了几个选项:
- 在"第一人称字符"中添加一个公共变量。这个公众变量将容纳NPC AI。因此NPC AI和第一人称角色可以通过两个类上的函数相互交谈
- 添加一个实现观察者模式的类"DialogService"。因此将会有几个出版商和订阅者。我的问题在这里是如何将NPC和第一人称角色连接起来的
- 也许你有更好的选择
如果你正在寻找一个简单的解决方案,我可以提供:
在角色的GameObject
内部有另一个GameObject
,比如说,"对话碰撞器"。向该游戏对象添加一个碰撞器组件,使其(碰撞器)成为触发器。此外,我建议您将碰撞器制作成一个半径更大的圆柱体,这样您就可以在不与其他角色发生实际碰撞的情况下进入对话框。
添加一个脚本,当"对话框碰撞器"与另一个同名/标记的游戏对象发生碰撞时,玩家角色会启动对话框。在这一点上,我认为所有游戏角色都有相同的设置:如果他们有一个对话框选项,那么他们都应该在主游戏对象内有一个"对话框碰撞器"GameObject
这样,您就可以将碰撞检测留给UnityEngine,而不是每帧都检查一次。
此外,我建议制作一个通用的Dialog
脚本;让它成为一个抽象类,你可以从中继承来覆盖一些方法,这样你就可以从一开始就拥有所有的基本功能,并有足够的灵活性来更改/扩展NPC的行为。
或者制作一个IDialogCharacter接口,为每个类手动实现方法和对话框;如果您更喜欢组合而不是继承,请使用多态性来检查IDialogCharacter接口。
作为连接部分,当冲突开始时,玩家角色将能够获取另一个角色的脚本(首先获取冲突的GameObject,然后获取脚本组件),并请求从另一个字符开始对话,或者从另一角色获取一些数据对象并启动对话。