Star☆Unityメモ

Unityのちょっとしたことをメモって後で見返せれたらいいなサイト

ダンジョンを1マスずつ進むローグライク(チョコボの不思議なダンジョン)的なもの

こちらのページが最新版です

zvn-x.hatenablog.com

f:id:zvn_X:20170115063457g:plain

概要

  1. チョコボのように1マスずつの移動を実装する
  2. マップの壁には移動できないようにする.
  3. iTweenで滑らかに移動

設計もどき

  1. ステージを配列で作ってみます.
0:壁
1:床
2:Player

1:{0,0,0,0,0,0,0},
2:{0,1,1,1,1,1,1,0},
3:{0,1,1,1,1,1,1,0},
4:{0,1,1,1,1,1,1,0},
5:{0,0,0,0,0,1,0},
  1. キャラクターの位置を管理する配列も作っていきます
0:
1:
2:Player

1:{0,0,0,0,0,0,0},
2:{0,0,0,0,0,0,0},
3:{0,0,0,0,0,2,0},
4:{0,0,0,0,0,0,0},
5:{0,0,0,0,0,0,0},

この時キャラクターは3-6Positionにいます. ステージ配列の中の3-6の右隣は0,それ以外は1なので プレイヤーは2-6,4-6,3-5に移動できることがわかる

これをプログラム上で再現すればよいのである.

実装

今回はシンプルな配列を用意しその中で,左の移動のみを行う

ステージ配列

[0,1,1,0]

Player

[0,0,2,0]

コード

void Update () {
    if(Input.GetKey(KeyCode.A)){

// Player配列からPlayerの位置を検索
        int index1 = player.IndexOf(2);

// 配列の範囲内ででなければreturn
        if (index1 == 0) {
            Debug.Log("限界値");
            return;
        }

// プレイヤーから見て左の場所が壁かを判定
        if(stage[index1-1] != 0){
            Debug.Log("壁じゃなかった場合");
            transform.position = new Vector3(index1 - 1, transform.position.y, transform.position.z);

// 配列上のプレイヤー位置を更新する
            player[index1] = 0;
            player[index1 - 1] = 2;
        }
        else{
            Debug.Log("左は壁だよ");
        }
    }
}

iTweenで動きをなめらかに

上記のコードではボタンを押した瞬間に一瞬で移動しちゃいますよね
なのでiTweenを利用して楽させていただきましょう

なめらかな移動

   Hashtable moveHash = new Hashtable();
    moveHash.Add("position", new Vector3(index1 - 1, transform.position.y, transform.position.z));
    moveHash.Add("time", 0.2f);
    moveHash.Add("delay", 0.0f);
    iTween.MoveTo(gameObject, moveHash);

応用

今回はStageとPlayerしか作っていませんが,モンスター配列やアイテム配列,その他の配列があると更にゲームらしくなりそうですね. ステージを配列で管理していると敵の自動生成,アイテムの自動生成も容易にできそうですよね.