アーマードコアの戦闘モードとスキャンモードを作ってみようと思った。
操作
R / モード切替
>戦闘モード
W A S D / 前進 左移動 後退 右移動
>スキャンモード
W A S D / 前進 左移動 後退 右移動
Q E / 左回転 右回転
クラスの中身はこんな感じ。
public class Player : MonoBehaviour { bool mode = false; //モードの状態 float modeChangeInterval = 0.5f; //切り替えキーのインターバル float nextChangeTime = 0.0f; //切り替え時間 void Start () { ModeText(); //テキストの設定 } void Update () { ModeChange(); Base(); if (mode == false) { ScanMode(); } else { BattleMode(); } } //移動方法の共通部分 void Base() { float vert = Input.GetAxisRaw("Vertical"); float hori = Input.GetAxisRaw("Horizontal"); transform.Translate(transform.InverseTransformVector(transform.forward) * vert * 0.1f); transform.Translate(transform.InverseTransformVector(transform.right) * hori * 0.1f); } //スキャンモードの左右回転 void ScanMode() { bool L = Input.GetKey(KeyCode.Q); bool R = Input.GetKey(KeyCode.E); if (L == true) transform.Rotate(0, -1.0f, 0); else if (R == true) transform.Rotate(0, 1.0f, 0); } //バトルモードのターゲット固定 void BattleMode() { transform.LookAt(GameObject.Find("Target1").transform.position); } //モード変更 void ModeChange() { if (Input.GetKey(KeyCode.R) && Time.time > nextChangeTime) { nextChangeTime = Time.time + modeChangeInterval; //変更が可能になる時間の設定 mode = !mode; //モードの切り替え ModeText(); テキスト表示 } } //現在のモードを表示 void ModeText() { TextMesh tm = GameObject.Find("Mode").GetComponent("TextMesh") as TextMesh; if (mode == true) { tm.text = "Buttle Mode"; } else { tm.text = "Scan Mode"; } } }
キー入力のクールタイム処理は
4Gamer.net ― 【完全図解】超初心者でも大丈夫。話題のゲームエンジン「Unity」での3Dゲーム作成入門
を参考にしました。