keita_nakamoriです。
standerdAssetsのAIThirdPersonContllor.prefabの使い方を学習する過程で、C#スクリプトの書き方、変数をインスペクターパネルから操作する方法について学んでいきます。
手順
- AIThirdPersonContllor.prefabをシーンに適当に配置します。
- 追跡目標Targetを変数として持っているので、Empty Objectを新規生成しTargetとしてアタッチします。
- Empty Objectの名称をwalkTargetに変更しましょう。
- C#スクリプト RandomPosition.csを新規作成し、walkTargetにアタッチしましょう。
- 以降、RandomPosition.csの中身を作っていきます。
RandomPosition.cs スクリプト作成の考え方
- SetRandomPosition()を作成:walkTargetのtransform.positionにランダム生成した座標を代入することで、追跡目標Targetの位置を時間変化させます。
- RePositionWithDelay()を作成:上記SetRandomPosition()を実行するとともに、位置変更のインターバルを設定します。
- Start ()を作成:上記RePositionWithDelay()をコルーチンとしてゲーム開始とともに呼び出します。
- あとで、位置変更インターバルをインスペクターパネルから微調整できるように、時間をパブリック定義しておきます。public float waitingTime = 5.0f;
- void update();メソドは今回必要ないので消しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RandomPosition : MonoBehaviour { //当該スクリプトはオブジェクト(例:WalkTarget)をランダムな座標に瞬間移動させる。 //パブリック変数定義 public float waitingTime = 5.0f; // Use this for initialization void Start () {//voidは値を返さないメソドのときに付ける ///レイテンシーに対処するためのStartメソド StartCoroutine(RePositionWithDelay()); //コルーチンはコードの一部分を関数から分離して呼び出された場所から実行される //IEnumerator routineを引数として定義すること(と決まっている) //args:RePositionWithDelay() 新規定義するメソド //rerurn:なし } IEnumerator RePositionWithDelay(){//IEnumerator //当該スクリプトを5秒間停止し、その間Unity側が他の処理を実行させる関数 //args:なし //return:WaitForSeconds(5) 当該スクリプトを5秒間停止し、その間Unity側が他の処理を実行する。 //ゲームが実行し続ける限り永久にループする while (true){ //「オブジェクトをランダムに動かす」メソドを実行する SetRandomPosition(); //5秒間 Unityに他のことをやってもらい、再びこのループに戻ってくるように命令する yield return new WaitForSeconds(waitingTime); } } void SetRandomPosition(){//voidは値を返さないメソドのときに付ける //オブジェクトのtransform.positionをランダムに移動させるメソド //args:なし //return:なし //ランダム座標を定義 float x = Random.Range(-5.0f, 5.0f);//本来は数値範囲についても変数化するのがベター float z = Random.Range(-5.0f, 5.0f); //座標をコンソールに出力してデバックする。文字列として //小数点以下は2桁とする Debug.Log("x,z: " + x.ToString("F2") + "," + z.ToString("F2")); //ランダム座標をベクトルとして新規定義し、オブジェクト座標を変更する transform.position = new Vector3(x, 0.0f, z);//y座標は地面に固定 } } |
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日