デジタルフロッグ

Unityのアプリの開発をしながらいろいろと忘れないための備忘録でございます。

自動で徘徊するAIを作ってみる

過去にLookAtを使って敵をこちら側に向けさせるということをやりました

 

karaagedigital.hatenablog.jp

 

今回の趣旨としては同じなのですが、こちらは回転させるので反転させるとした場合にLookAtだと急激に反転するものがこちらでは回転させるのでクルッと振り向く事になります。

ターゲットへ視線を追随する場合はLookAtでもいいのですが、クルッと回転させたい場合に少しLookAtは不向きかと思います。

さっそくスクリプトをば

 

using UnityEngine;
using System.Collections;

public class hogehoge : MonoBehaviour {
    private float speed = 1f;
    private GameObject _cube;
    private Vector3 targetPosition;
    private float moveTime;
    private void Start () {
        _cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
        targetPosition = GetRandomPosition ();
        moveTime = Random.Range (5, 10);
    }

    // Update is called once per frame
    void Update () {
        moveTime -= Time.deltaTime;
        //moveTimeが0以上なら行動する
        if (moveTime > 0) {
        //正面に進む
            _cube.transform.Translate (Vector3.forward * speed * Time.deltaTime);
            Quaternion targetRotation = Quaternion.LookRotation (targetPosition - _cube.transform.position);
            _cube.transform.rotation = Quaternion.Slerp (_cube.transform.rotation, targetRotation, Time.deltaTime / 2);
        }
        //moveTimeが0以下なら次のポイントを設定する
        if (moveTime < 0) {
            moveTime = MoveTime ();
            targetPosition = GetRandomPosition ();
            Debug.Log (targetPosition);
        }
    }

    public Vector3 GetRandomPosition(){
        float levelSize = 10f;
        return new Vector3(Random.Range(-levelSize,levelSize),0,Random.Range(-levelSize,levelSize));
    }

    public float MoveTime(){
        return Random.Range (5, 10);
    }
}

f:id:karaagedigital:20160921151000g:plain

 

speedが遅くてgifにすると長くなるのでスピードは3にしてます。

ターゲット向かって回転しながらfowordで前進していっています。

ランダムな敵の動きを作ろうと思ってこれに行きつきました。

ただ、これでは常に動き回っているので立ち止まったりする挙動も入れていきたいと思います。