同人サークルA-Nestの技術メモです。

翻訳元ページ

移動スクリプトの作成

A* パスファインディングプロジェクトを始めましょう。

簡単なカスタムムーブメントスクリプトを書くためのチュートリアルです。

このチュートリアルは、スタートアップ・チュートリアルの一部です。A* Pathfinding Project を始めよう。

これから、AIを動かすための、本当に簡単なスクリプトを書きますので、お気に入りのスクリプトエディタを開いて、従ってください。

備考
このチュートリアルは、3Dゲームだけでなく、2Dゲームを作成する場合にも適用されます。場合によっては、2Dと3Dで若干異なる指示があることもあります。2Dと3Dのコードはほとんど同じですが、異なる部分がいくつかあります。その場合はコメントで明記しています。ただし、スタートアップ・チュートリアルで作成した環境は3D環境です。2D環境のグラフの作成方法については、Pathfinding in 2D をご覧ください。

まず最初に行うべきことは、経路を計算することです。これには、SeekerコンポーネントのStartPathメソッドを使用します。Seeker への呼び出しは実にシンプルで、3つの引数、開始位置、終了位置、コールバック関数("void SomeFunction (Path p)" という形式でなければならない)です。

Path StartPath (Vector3 start, Vector3 end, OnPathDelegate callback = null) 

それでは、起動時にパスリクエストを開始する簡単なスニペットでスクリプトを始めてみましょう。
using UnityEngine;
using System.Collections;
// Note this line, if it is left out, the script won't know that the class 'Path' exists and it will throw compiler errors
// This line should always be present at the top of scripts which use pathfinding
using Pathfinding;

public class AstarAI : MonoBehaviour {
    public Transform targetPosition;

    public void Start () {
        // Get a reference to the Seeker component we added earlier
        Seeker seeker = GetComponent<Seeker>();

        // Start to calculate a new path to the targetPosition object, return the result to the OnPathComplete method.
        // Path requests are asynchronous, so when the OnPathComplete method is called depends on how long it
        // takes to calculate the path. Usually it is called the next frame.
        seeker.StartPath(transform.position, targetPosition.position, OnPathComplete);
    }

    public void OnPathComplete (Path p) {
        Debug.Log("Yay, we got a path back. Did it have an error? " + p.error);
    }
} 

これをAstarAI.csという名前でプロジェクト内のファイルに保存し、AI GameObjectにスクリプトを追加します。
ターゲットとなるGameObjectを新規に作成し、座標(-20,0,22)に移動させ、AI GameObjectを選択してターゲットをtargetPositionフィールドにドラッグしてください。この位置がAIが経路を探そうとする位置です。



再生ボタンを押します。ログメッセージが表示され、シーンビューに緑色の線でパスが表示されるはずです(Seekerコンポーネントは、Gizmosを使用して最後に計算したパスを描画します)。

緑色の線が表示されない場合は、SeekerコンポーネントにGizmosを表示するチェックボックスがオンになっていることを確認します。最近のUnityでは、ギズモの深度テストも行われているため、地面の下に隠れてしまうことがあります。深度テストを無効にするには、シーンビューウィンドウの上のギズモボタンをクリックし、「3Dアイコン」チェックボックスをオフにします。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

編集にはIDが必要です