読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

ローグライクゲームを作る(1)

TPSを、動的にダンジョンを作るローグライクゲームにしてみます。
ダンジョン生成は以前ネクロマンサーもどきの時にやってますのでコードを流用します。
f:id:yasu9780:20161104022338p:plain

カメラとプレイヤーの間に壁が割り込んだ場合に、カメラ位置を変更する処理を入れました。
とりあえずAIを引き連れて歩けます。
ただし、動的ダンジョン生成なので、navMeshは使えませんので、navMesh関係は削除しました。
よってAIと逸れると会うことができなくなります(´・ω・`)
f:id:yasu9780:20161104030620g:plain


追尾カメラはこんな感じ。
向きはプレイヤーと同じ。
位置はすこし後ろ。
プレイヤーからカメラへ向かって光線を飛ばして、障害物があったら、
カメラの位置をすこし詰めます。
Lerpで位置を変更しているので、やや遅れて追尾するカメラになっています。

public class TPScameraController : MonoBehaviour {
    public GameObject target;
    int layerMask;

    void Start () {
        layerMask = 1 << LayerMask.NameToLayer("Ignore Raycast");
        layerMask = ~layerMask;
    }
    void Update()
    {
        if (target == null && Main.blue[0] != null)
            target = Main.blue[0].transform.FindChild("head").gameObject;
        if (target == null) return;

        transform.rotation = Quaternion.Lerp(transform.rotation,
            target.transform.rotation
            , Time.deltaTime * 5.0f);

        Vector3 offset = (target.transform.forward * 5.0f + target.transform.up * 0.5f);
        RaycastHit hit;
        if (Physics.Linecast(target.transform.position, transform.position, out hit, layerMask))
        {
            transform.position = Vector3.Lerp(transform.position,
                target.transform.position - offset * 0.3f
                , Time.deltaTime * 5.0f);
            return;
        }
        transform.position = Vector3.Lerp(transform.position,
            target.transform.position - offset
            , Time.deltaTime * 5.0f);
    }
}

追尾カメラはこちらを参考にさせてもらいました。

gametukurikata.com

広告を非表示にする