時間経過でエネミーの移動の実装【ソース作成】 - acro-takahashi/Unity_Study_Kit GitHub Wiki
完成図
オブジェクトを時間経過で移動するように設定しよう
※ランダム変数で移動幅を決めることもできますが、今回は値を直接入力する形で実装します。
- C#スクリプトを作成する
※作成する場所は任意となりますが、Sourceディレクトリを作成して配置することが一般的となります。
ファイル名も任意となりますが、今回は「Enemy_move」とします。
-
作成したC#スクリプトをダブルクリックで開示する
以下最初からある関数の説明
-
今回実装される内容をイメージする
①時間に対して移動幅を決める(時間【条件】 = 時間【変数】、移動幅【変数】)
⇒ずっと同じ方向に行き続けない様に進んだ分だけ戻るように組む必要がある(時間【条件】) ⇒止まっている時間も作る(時間【条件】) -
変数を用意する
図の下にコピペ用を用意してあります。
//**フィールド且つpublicの場合、インスペクター上で変更可能になる**
//**Headerを付けるとインスペクター上に見出しを設けることが出来る**
//時間の値確保用変数
private float timeElapsed;
[Header("奇数秒目に移動する距離")]
public float X = -0.05f;
public float Y = 0f;
public float Z = 0;
[Header("偶数秒目に移動する距離")]
public float X2 = 0.05f;
public float Y2 = 0.15f;
public float Z2 = 0;
- 条件分岐を作成する
図の下にコピペ用を用意してあります。
今回は時間に対して都度動かす必要があるため、「Update」関数に組み込む
void Update()
{
timeElapsed += Time.deltaTime;//秒数
if (timeElapsed <= 1)//0秒~1秒未満の間の動作
{
transform.Translate(X, Y, Z);//どれくらい動くかX軸、Y軸、Z軸を設定(フィールド変数で指定
return;//ifの頭に戻る
}
else if (timeElapsed <= 2)//1秒~2秒未満の間の動作
{
return;//動作しないでifの頭に戻る
}
else if (timeElapsed <= 3)//2秒~3秒未満の間の動作
{
transform.Translate(X2, Y2, Z2);//どれくらい動くかX軸、Y軸、Z軸を設定(フィールド変数で指定
//※同じ位置に戻したい場合は+した値を-にすること(Y軸除く
return;//ifの頭に戻る
}
else if (timeElapsed <= 4)//3秒~4秒未満の間の動作
{
return;//動作しないでifの頭に戻る
}
timeElapsed = 0;//4秒を超えた時点で時間を0に戻す。つまりifを繰り返す。
}
以上でソース作成は完了なので保存してUnityに戻ります。
- 作成したソースに対して動作確認する
まずは適当に床となるものを置きます。(今回は平面のオブジェクトとしてます)
次に動作させるオブジェクトを適当に置きます。(今回はキューブのオブジェクトとしてます)
ついでに重力落下させるためにリジッドボディも付けます。
リジッドボディ・・・重力を設定出来るコンポーネント
作成したスクリプトファイルも付けます。
フィールド変数にpublicを付けているとインスペクター上で細かな変更は可能となります。
また、Headerタグを付けることによって見出しとしてインスペクター上に表示されます。
- 実行して動作確認する
以下のような動作となるはずです。