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