Unity3d 在Unity中使用光线投射修改AI脚本

Unity3d 在Unity中使用光线投射修改AI脚本,unity3d,unityscript,raycasting,Unity3d,Unityscript,Raycasting,所以我设法修改了一些我找到的光线投射代码,这样我的敌人就可以朝着我的第一人称相机的坐标移动。但是,我需要改变光线投射在场景中障碍物周围移动敌人的方式。我对myTransform/transform/target变量感到有点困惑 这就是我的代码 var speed : float = 10.0; private var dir : Vector3; private var dirFull : Vector3; var target : Transform; var rotationSpeed =

所以我设法修改了一些我找到的光线投射代码,这样我的敌人就可以朝着我的第一人称相机的坐标移动。但是,我需要改变光线投射在场景中障碍物周围移动敌人的方式。我对
myTransform
/
transform
/
target
变量感到有点困惑

这就是我的代码

var speed : float = 10.0;
private var dir : Vector3;
private var dirFull : Vector3;
var target : Transform;
var rotationSpeed = 3;

var myTransform : Transform;

function Awake()
{
  myTransform = transform;
}


function Start()
{
  target = GameObject.FindGameObjectWithTag("Player").transform; //Target the player
}

function FixedUpdate()
{ 
  // the directional vector to the target
  dir = (target - transform.position).normalized;
  var hit : RaycastHit;

  // more raycasts   
  var leftRay = transform.position + Vector3(-0.125, 0, 0);
  var rightRay = transform.position + Vector3(0.125, 0, 0);


  // check for forward raycast
  if (Physics.Raycast(transform.position, transform.forward, hit, 5)) /
  {
     if (hit.transform != this.transform)
     {
       Debug.DrawLine (transform.position, hit.point, Color.white);

       dir += hit.normal * 20; // 20 is force to repel by
     }
  }


  // check for leftRay raycast
  if (Physics.Raycast(leftRay, transform.forward, hit, 5)) 
  {
     if (hit.transform != this.transform)
     {
       Debug.DrawLine (leftRay, hit.point, Color.red);

       dir += hit.normal * 20; // 20 is force to repel by
     }
  }


  // check for rightRay raycast
  if (Physics.Raycast(rightRay, transform.forward, hit, 5)) 
  {
     if (hit.transform != this.transform)
     {
       Debug.DrawLine (rightRay, hit.point, Color.green);

       dir += hit.normal * 20; // 20 is force to repel by
     }
  }

   // rotation
var rot = Quaternion.LookRotation (dir);

transform.rotation = Quaternion.Slerp (transform.rotation, rot, Time.deltaTime);

//position
transform.position += transform.forward * (2 * Time.deltaTime); // 20 is speed
}
我几乎可以肯定,我唯一需要更改的是
dir
变量,以便它使用新的转换代码。但正如我所说的,我一直对使用哪个变量感到困惑


编辑:我的理解是,我需要更改更新底部的代码,以便将通过光线投射遇到障碍物时发生的旋转考虑在内。这就是为什么我认为只是“dir”和“rot”需要更改,然后在位置和旋转代码中使用

大多数
FixedUpdate()
函数用于计算
dir
值。但是,最后有一些注释表示代码正在更新位置,但它们不使用计算的
dir
值。我无法对此进行测试,但您似乎需要将最后一行更改为:

transform.position += dir * (2 * Time.deltaTime);
目前,此代码忽略敌人或玩家的任何位置:

transform.position += transform.forward * (2 * Time.deltaTime); // 20 is speed
它只是试图将敌人“向前”移动,这被定义为“世界空间变换的蓝色轴”


如果你有代码使敌人朝着
dir
的方向旋转,那么你似乎需要把敌人朝那个方向移动。

我所要做的就是更改代码行

dir = (target - transform.position).normalized;


因此,当我猜测dir变量需要更改时,我是对的。

我假设此脚本附加到敌人,而不是玩家。是吗?是的,它与敌人有关。我刚刚想出了解决办法。当我被允许的时候,我会把它作为一个答案发布(我必须等8个小时才能发布我自己问题的答案)。很高兴你让它工作了;很抱歉,我帮不了你。我猜你是用Unity3d来做这个,而不是Unity容器?我在重新记录问题,别以为是这个。移动/旋转代码工作正常。当敌人遇到需要更改“dir+=hit.normal*20”的障碍物时,该代码会更改敌人的位置,那么在哪里使用
dir
?您的光线投射代码仅修改
dir
。如果你从未使用过
dir
,那么你使用什么代码来设置
dir
的值并不重要。此外,如果你说绕过障碍物的代码不起作用,你怎么能说“移动/旋转代码工作正常?”呢?我只是将代码改为原来的代码(在我开始胡闹之前)。现在,您可以在Update函数的底部看到正在使用dir。我所说的移动/旋转工作的意思是,敌人确实向第一人称摄影机移动,如果我可能的话,它也会向第一人称摄影机旋转。现在,因为我已将代码更改回原始代码,它已被破坏,因为转换冲突。刚刚看到您的编辑,我知道如何在不考虑障碍物所需的旋转时修改位置/旋转代码。我可以让敌人很好地跟着我。这就是我的问题所在,我不知道如何修改光线投射代码,以便在跟踪我时将其考虑在内。
dir = target.position - myTransform.position;