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
C# 不同形状行星中的人工智能-Unity 3D_C#_Unity3d_Artificial Intelligence - Fatal编程技术网

C# 不同形状行星中的人工智能-Unity 3D

C# 不同形状行星中的人工智能-Unity 3D,c#,unity3d,artificial-intelligence,C#,Unity3d,Artificial Intelligence,我目前正在一个Unity 3D项目中工作(精确地说是5.0.1版),在这个项目中,角色可以在不同形状的行星中行走而不会坠落。所以它总是被行星的引力所吸引(类似于超级马里奥银河游戏) 现在,问题是当我试图为敌人编写人工智能时。这个人工智能应该非常简单,但由于我对行星形状的研究,我还没能想出一个解决方案。敌人应该检查玩家的位置,然后向前移动到它的位置。这真是个愚蠢的敌人。但问题是,敌人必须能够跟踪玩家并到达其位置,无论他在哪个星球。所以,如果行星是圆形的,我不能让敌人看着玩家然后向前移动,就像我在行

我目前正在一个Unity 3D项目中工作(精确地说是5.0.1版),在这个项目中,角色可以在不同形状的行星中行走而不会坠落。所以它总是被行星的引力所吸引(类似于超级马里奥银河游戏)

现在,问题是当我试图为敌人编写人工智能时。这个人工智能应该非常简单,但由于我对行星形状的研究,我还没能想出一个解决方案。敌人应该检查玩家的位置,然后向前移动到它的位置。这真是个愚蠢的敌人。但问题是,敌人必须能够跟踪玩家并到达其位置,无论他在哪个星球。所以,如果行星是圆形的,我不能让敌人看着玩家然后向前移动,就像我在行星平面上做的那样

我已经尝试过使用NavMesh,但Unity不想合作,最终制作了一个占地球1/3的NavMesh。我不明白为什么。我尝试过更改NavMesh烘焙的每个参数,但没有成功

我想做的另一个问题是:?如何让玩家在使用网格对撞机时,能够在任何行星的表面上,无论其形状如何,以平滑的方式行走?我目前正在通过光线投射获得行星的法线,旋转播放器,使Y轴垂直于法线,并在Y轴上施加一个力来模拟重力。但是当我实现网格碰撞器时,这会带来很多问题。它会产生一种紧张的效果。但是,当我使用Unity的原始碰撞器时,它工作得很好

无论如何。我现在最需要的是人工智能问题的答案。另一个有点像加号


附言:解决方案是否使用Javascript并不重要。然后我可以把它翻译成C#:)

当你说圆形行星时,你是说球形吗?问题是敌人可能在球体的另一边,让敌人看着玩家使它面对地面吗?是的。我是说球形的。对不起。这正是你所说的。如果我让敌人盯着球员看,它就会面向地面,因此毫无用处。请记住,我以这颗球形行星为例。但它也可能是一个胶囊或圆环结或任何你能想到的3D图形。所以这真的很棘手…是的。。。听起来很难,我不知道怎么解决。我想到的唯一一件事是得到一个与所讨论的形状相当的平面,就像你去谷歌地图看到一张地球平面图,然后让平面使用路径规划算法找到玩家一样。这对于奇怪的形状是很棘手的,我不知道它是否适用于所有形状。我想其他的解决办法更好,但这是我能想出的最好的办法。祝你好运这实际上是一个很好的解决方案。或者,至少,这是我听过的最好的!我试试看,告诉你我能完成什么。谢谢你所做的一切!!嗯,我还没能想出一个解决办法。所以我所做的就是让敌人在创建时选择一个随机的方向,然后一直向前移动,直到他发现玩家在他确定的半径内。该半径的设置是为了在旋转行星时,行星的曲率不会影响敌人的移动,使其面向玩家。然后,它开始跟随玩家。这是我能想到的最好的,它让我暂时摆脱了困境。这不是最好的解决方案,但目前它仍然有效。如果我能想出更好的办法,我会再发一次。