アーマードコア風モード

アーマード・コア ヴァーディクトデイ MATSUKAZE mdl.2 拠点防衛仕様 1/72スケール プラモデル



アーマードコアの戦闘モードとスキャンモードを作ってみようと思った。


操作
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ゲーム作成入門
を参考にしました。