【ローグライクゲー】配列からマップを生成する【制作日記】

どうも、萬朶櫻(@wanduoying)、179朶目の記事です。

ゲーム作りたい【Unity】令和が始つたし、ゲーム制作に挑戰してみます【Tech Academy】

前囘の記事で言つた通り、ゲームを作つてゐます。ジャンルはトルネコやシレンみたいなローグライク。

 

キャラクターが動くためのマップが無いと始まらない。

といふことで、まづはマップから作らうと思ひます。

原點に壁(キューブ)を1つだけ生成

とりあへず原點ぐゑんてんに壁を1つだけ生成することに

 

生成するオブジェクトはこちら。

壁のオブジェクト(キューブ)

なんの變哲へんてつも無いキューブに「壁」のテクスチャを貼り付けただけのオブジェクト。プレハブ化はませてあります。

 

そしてこれを生成するためのコードがこちら。

忘れずにインスペクターで壁のプレハブを指定して、いざ實行じつかう

實行後

はい。シュールな光景ですが、できました。

1次元の配列を用ゐて壁(キューブ)を生成

いちいち手動で壁などを配置するのはキツイので、配列を使ふことにしました。

横一列で要素數インデックス3の配列、0番目と3番目に壁が生成されるやうにしてゐます。

そして實行じつかう

意圖いと通りに生成されました。

 

29行目の所、

  • 正:wall.transform.position = new Vector3(i, 0, 0);
  • 誤:wall.transform.position = new Vector3(field[i], 0, 0);

最初、上記のやうに間違へてゐて、戸惑ひました。

これだと全ての壁が(1,0,0)の所に生成されてしまひます。

1次元の配列にランダムな變數を用ゐて壁(キューブ)を生成

メンバ變數へんすうrandomMinとrandomMaxを宣言し、配列の各要素にRandom.Range(randomMin, randomMax)を代入しました。

これでランダムに壁が生成されるやうになります。

さらに配列を長くしても大丈夫なやうにする

これまでは各インデックスに手動でRandom.Rangeを充ててゐました。

しかしそれでは大きなダンジョンを生成する時に大變たいへんなので、どうにかします。

 

15行目で變數へんすうm_widthを宣言し、これを配列の幅とします。

あと24行目と30行目のfor文でGetLengthを使つてみました。これは配列の幅(要素數)を取得するものです。

實行じつかうすると、ちやんと生成されてゐます。

コンソールを確かめても大丈夫みたいです。

配列を2次元に擴張

いよいよ2次元のマップにしていきます。

基本的にはZ軸用の變數へんすうを追加したり、for文を入れ子にして次元を擴張くわくちやうしてゐます。

ちやんと10×10の範圍はんゐ内に、壁がランダムで生成されてゐます。

 

しかしここで氣附きづいたのですが、このやり方だとローグライクの部屋+通路の形にできませんね。

後日作つたマップ。こんな感じに壁や床を配置したい

敵、アイテム、罠などの生成には使へさうだから、無駄と云ふわけでは無ささうだけど…

 

とりあへず氣を取り直して良い感じのマップが作れるやうに頑張ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA