Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity 3D:游戏对象交互_C#_Unity3d_Unityscript - Fatal编程技术网

C# Unity 3D:游戏对象交互

C# Unity 3D:游戏对象交互,c#,unity3d,unityscript,C#,Unity3d,Unityscript,假设我们有一个第一人称角色和几个NPC AI。第一人称角色应该能够与NPC AI对话(通过对话服务)。我的问题是:我应该如何“连接”两个游戏对象(FPC和NPC)彼此 所以他基本上可以四处走动和他们交谈,然后他们回答一些问题,第一人称角色可以选择一个选项 我在这里看到几个选项: 将公共变量添加到“第一人称字符”。这个公众 变量将保存NPC AI。所以NPC AI和第一人称 角色可以通过两个类上的函数相互对话 添加一个实现观察者模式的类“DialogService”。 因此,将有几个出版商和订户。

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

所以他基本上可以四处走动和他们交谈,然后他们回答一些问题,第一人称角色可以选择一个选项

我在这里看到几个选项:

  • 将公共变量添加到“第一人称字符”。这个公众 变量将保存NPC AI。所以NPC AI和第一人称 角色可以通过两个类上的函数相互对话
  • 添加一个实现观察者模式的类“DialogService”。 因此,将有几个出版商和订户。我的问题在这里 是如何将NPC和第一人称角色连接起来的
  • 也许你有更好的选择

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

    在角色的
    GameObject
    内部有另一个
    GameObject
    称为“对话碰撞器”。将碰撞器组件添加到该游戏对象,使其(碰撞器)成为触发器。此外,我建议您将碰撞器设置为半径更大的圆柱体,这样您就可以进入对话框而不会与其他角色发生实际碰撞

    为玩家角色添加一个脚本,当“对话碰撞器”进入与另一个同名/标记的游戏对象的碰撞时,该脚本将启动对话。在这一点上,我假设你对所有游戏角色都有相同的设置:他们都应该在主游戏对象内部有一个“对话碰撞器”
    GameObject
    ,如果他们有一个对话选项开始的话

    这样,您就可以将碰撞检测留给UnityEngine,而不是每一帧都进行检查

    另外,我建议制作一个通用的
    对话框
    脚本;使它成为一个抽象类,您可以继承它来重写某些方法,这样您就可以从一开始就拥有所有基本功能,并且有足够的灵活性来更改/扩展NPC的行为

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


    作为连接部分-当碰撞开始时,玩家角色将能够获取脚本(首先获取碰撞游戏对象,然后获取脚本组件)从另一个角色开始,或者从另一个角色获取一些数据对象,然后开始对话。

    你也可以让玩家点击NPC,然后开始互动。互动的方法其实并不重要,但通常在对话框可用时会提示您;通常当你离目标足够近的时候。作为挂钩部分,我真的觉得使用Unity基于组件的方法很容易访问目标游戏对象的组件并启动序列、获取数据或启动协同程序。哦,我明白了,对不起,我误解了这个问题。你的路看起来确实是该走的路!