【问题标题】:Enemy Ai unityscript movement issueEnemy Ai unityscript 移动问题
【发布时间】:2015-11-18 15:28:07
【问题描述】:

我目前使用的代码让敌人在远处注意到我,然后在我靠近时跟随我。我遇到的问题是他们如何移动。我正在构建一个 Minecraft 风格的游戏,但我无法让敌人留在地面上并像我使用 fps 控制器一样跳上每个街区。他们似乎只是向我漂浮了尽可能短的距离。

代码:

 var target : Transform; //the enemy's target
 var moveSpeed = 3; //move speed
 var rotationSpeed = 3; //speed of turning
 var range : float=10f;
 var range2 : float=10f;
 var stop : float=0;
 var myTransform : Transform; //current transform data of this enemy
 function Awake()
 {
     myTransform = transform; //cache transform data for easy access/preformance
 }

 function Start()
 {
      target = GameObject.FindWithTag("1Player").transform; //target the player

 }

 function Update () {
     //rotate to look at the player
     var distance = Vector3.Distance(myTransform.position, target.position);
     if (distance<=range2 &&  distance>=range){
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
     }


     else if(distance<=range && distance>stop){

     //move towards the player
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
     myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
     }
     else if (distance<=stop) {
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
     }


 }

【问题讨论】:

  • 这就是您编写代码的目的,让它们直接浮向您。您可以尝试设置 Navmesh(虽然我不知道它是否能在不断变化的 3D 环境中正常工作)或查找/编写您自己的更复杂的 AI 导航脚本。

标签: unity3d artificial-intelligence unityscript


【解决方案1】:

好的,这就是你所缺少的:

1.将x轴和z轴的旋转锁定为零

myTransform.eulerAngles = new Vector3(0f, myTransform.eulerAngles.y, 0);

只需在最后添加这一行。

2.在AI前面进行短距离射线投射,如果它检测到一些障碍物,则停止当前移动并沿y轴移动,如果没有障碍物移动,就像你在脚本中写的那样。

至于光线投射,我不需要在这里写,你可以在 Unity3D 文档中找到更多信息: http://docs.unity3d.com/ScriptReference/Physics.Raycast.html 这个教程很适合声明者:https://unity3d.com/learn/tutorials/modules/beginner/physics/raycasting

【讨论】:

  • 对于新手来说似乎是个不错的起点,但我很确定这只会让敌人上坡,而不是下坡。在 Minecraft 类型的世界中保持稳健,我认为实际上可能真的很难。
  • 哈哈哈对不起我完全忘记了下坡,添加另一个射线投射,在玩家下方以下降的方向射击,如果它击中非常接近的东西(意味着地面就在下面)继续你的脚本,否则摔倒。
  • 也可以尝试使用物理来处理它并使用力移动它而不是直接操纵变换,可能会产生一些意想不到的(但可能很有趣!)后果。
  • @NotAGenie 看过那个教程,但我似乎无法让它工作,现在不得不恢复到带有 x 和 z 轴锁定的原始代码。另外,当我再次离开敌人的视野时,他们似乎只是飘走了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 2023-03-03
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多