GameAIの勉強がてらUnityを使って敵を追跡するアルゴリズムを実装してみた。
LOS追跡、Line-of-Sighは的に対して最短距離で追い込むようなものです。
仕組みは非常に簡単でプレイヤーとのVectorの差分を計算し、その方向に力を加えるだけです。
実際のコードはこんな感じ。
using UnityEngine;
using System.Collections;
public class LosEnemyControlScript : MonoBehaviour {
//追跡対象
public GameObject objTarget;
//今までいた位置を保持
public Vector2 prev;
//初期化処理
void Start () {
prev = transform.position;
}
void Update () {
Move();
}
//移動関数
void Move(){
//ユーザの場所を特定
Vector2 Predetor = objTarget.transform.position;
float x = Predetor.x;
float y = Predetor.y;
//追跡方向の決定
Vector2 direction = new Vector2(x - transform.position.x, y - transform.position.y).normalized;
//ターゲット方向に力を加える
GetComponent<Rigidbody2D> ().velocity = (direction * 4);
//本体の向きを調整
Vector2 Position = transform.position;
Vector2 diff = Position - prev;
if (diff.magnitude > 0.01) {
float angle = Mathf.Atan2 (diff.y, diff.x) * Mathf.Rad2Deg - 90;
transform.rotation = Quaternion.AngleAxis (angle, Vector3.forward);
}
//次回角度計算のために現在位置を保持
prev = Position;
}
}
かわいらしいですね♪