0

そのため、レイキャスティング用に見つけたコードを修正して、敵が一人称カメラの座標に向かって移動するようにしました。ただし、レイ キャスティングがシーン内の障害物の周りで敵を動かす方法を変更する必要があります。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」だけであり、位置と回転コードで使用されると思います。

4

2 に答える 2

0

関数のほとんどは、値FixedUpdate()を計算するために使用されますdir。ただし、最後に、コードが位置を更新しているというコメントがありますが、計算されたdir値は使用されません。これをテストすることはできませんが、最後の行を次のように変更する必要があるようです:

transform.position += dir * (2 * Time.deltaTime);

現在のところ、このコードは敵またはプレイヤーの位置を無視します。

transform.position += transform.forward * (2 * Time.deltaTime); // 20 is speed

これは、( Unity のドキュメントで)「ワールド空間でのトランスフォームの青い軸」として定義されている敵を「前方」に動かそうとするだけです。

の方向に敵を回転させるコードがある場合、dirその方向に敵を移動させる必要があるようです。

于 2013-03-18T17:25:33.550 に答える
0

これを機能させるために変更しなければならなかったのは、コード行だけでした。

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

に...

dir = target.position - myTransform.position; 

したがって、変更が必要なのは dir 変数であると推測したとき、私は正しかったです。

于 2013-03-31T19:09:11.350 に答える