Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

unity

unityでのダンジョンの簡単な作り方(コードコピペで作れます)

投稿日:2020年4月3日 更新日:

Pocket

うも、チャーさんです。

 

あなたは、unityでダンジョンを作りたいと

思っていませんか?

 

この記事ではunityでのダンジョンの作り方を

説明してまして、本記事を読めば

あなたはダンジョンを作れます。

 

 

本記事の内容をやると下記のような

ダンジョンができます。(地形も自由にいじれます)

unity ダンジョン

 

 

またスクリプトも極力シンプルで短め

わかりやすいコードなので、

 

頭を悩ませずにunityでダンジョンを作りたい

と思ってたらこのまま読んでみてください。

 

*動画もとったので、動画派の人はどうぞ。

スポンサードサーチ

unityでのダンジョンの作り方

 

ということで、本題に入ります。

unityでダンジョンを

作るには以下があればできます。

 

壁にするCubeのプレハブ

スクリプト

 二次元配列(これが実際のダンジョンの地形になります)

 forループとif文を組みわせたInstantiate(これでマップを生成します)

 

大きく分けてこれらでダンジョン作れます。

 

 

でダンジョンを作成するために

使うコードは以下です。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class wallMaker : MonoBehaviour {

    public GameObject wall; //壁にするプレハブ取得用の変数

    // Use this for initialization
    void Start () {
        int[,] map = {
            {1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,1,1,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,1,1,1,1,1,1,1,1}
        }; //これがダンジョンの地形になる二次元配列 1が壁 0が道です。
    

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if(map[i,j]== 1){
                    Instantiate (wall, new Vector3 (j, 0, i), Quaternion.identity);
                }
            }
        } //このループで二次元配列に基づいて壁を作成

            
    }
    
}

 

 

これでダンジョンができます。

 

 

ダンジョン作成スクリプトの説明

 

ではここからはコードの説明です。

 

まずは

public GameObject wall; //壁にするプレハブ取得用の変数

ですが、

 

for文でinstantiateする際に、

プレハブ化したcubeを使います(これが壁になる)

なので変数宣言して、プレハブ(cube)を取得。

 

 

次に二次元配列の

void Start () {
        int[,] map = {
            {1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,1,1,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,1,1,1,1,1,1,1,1}
        }; //これがダンジョンの地形になる二次元配列 1が壁 0が道です。

 

ですが、これがダンジョンの地形になります。

 

 

後でも説明しますが、

 

for文ループでInstantiateする際に、

1なら壁(cube)を生成し、0ならcubeを生成しない

というのをやります。

 

こうすることで、上記の配列の地形のダンジョンを

作成することができます。

 

 

で次に、

     for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if(map[i,j]== 1){
                    Instantiate (wall, new Vector3 (j, 0, i), Quaternion.identity);
                }
            }
        } //このループで二次元配列に基づいて壁を作成

 

ですが、for文でループしながら

cubeを作成させダンジョンを作ります。

 

これはfor文の入れ子ですが、

入れ子にしてやることで、

x軸とz軸と座標を変えながらcube壁をinstantiateできます。

 

 

例えば、

外側のループfor (int i = 0; i < 9; i++)1週目、

かつ中のループfor (int j = 0; j < 9; j++)1週目の時、

 

Instantiate (wall, new Vector3 (j, 0, i), Quaternion.identity);

とコードを書いておくと、

 

x軸が0(変数j)

z軸が0(変数i)で座標でいうと(0,0,0)の位置にcube壁が

作成されるというわけです。

 

 

で中のループ2周目では変数 j がj++で1になり、

変数 i が0(外側のループは中のループが

最後にいくまで1週目なので)のままで、

 

座標(1,0,0)の位置にcubeが作成されるわけです。

 

 

そして中のループが最後までいったら、

次は外のループの2週目になりまして、

 

変数 i が1になり、z軸が1の列で

(0,0,1) (1,0,1) (2,0,1)…..のように座標を変えて

cubeを順々に生成してくれることになります。

 

 

なので上記のコード書いとけば、

ループで順々にcube壁を生成してくれるので、

ダンジョンを作ってってくれるわけですね。

 

で、ここでもう一つミソなのが、

if(map[i,j]== 1)でして、

これによって二次元配列の配列の中の数字が、

 

1ならcube壁を生成、0なら壁を作らない

になります。

 

 

例えば

今回の例でいうと二次元配列で

int[,] map = {
            {1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,1,0,1},

・・・・・・・

がありますが、

 

ループで外側のループが1週目なら変数 i が

0、内側のループが1週目の時、変数 j が0になり、

配列アクセスの際のインデックス番号が0,0になります。

 

(map[0,0]にアクセスしている)

 

 

でこれは上記の二次元配列でいうと、

一番左上の部分になりまして数字が1ですよね。

 

ということでcube壁がinstantiateされます。

 

 

で次に内側のループが2週目になりインデックス番号が

[0,1]になり左上から2番目の数字にアクセスする

 

そしてそれがどんどん添え字の数字がループで

更新され、配列内の1か0を参照しながら、

 

cube壁を生成し意図した地形のダンジョンを

生成してくれるというわけです。

 

 

この二次元配列のアクセスの仕方やインデックス番号

に関して知らない場合は上記説明でピンと

来ないと思うので、

 

c#の二次元配列の取得あたりでググって、

知識を得ると理解しやすいです。

 

 

という感じでコードの説明は以上ですが、

上記の仕組みでダンジョンを生成できます。

 

 

ダンジョン作成までの手順

 

でここからは手順の説明です。

 

プレハブを作ろう

 

まずは壁になるプレハブが必要なので、

cubeを作成しプレハブ化しましょう。

 

その際cubeに色をつけとくと、見やすいです。

 

 

プレハブ化するには、projectのcreateから

prefabをクリックしたらprefabができます。

 

あとはそこにhierarcyにあるcubeを

ドラッグアンドドロップすればプレハブ化されます。

 

プレハブ化したらHierarchyにある

cubeは消してもokです。

 

 

スクリプトをつけましょう

 

で次に、どんなゲームオブジェクトにでもいいのですが、

スクリプトをadd componentしましょう。

 

思いつかなければhierarchyからcreate >

create empty でokです。

でそのオブジェクトにスクリプトつけましょう。

 

名前は上記のコードを丸コピする場合は、

wallMakerとすれば良いです。

 

 

でスクリプトつけてスクリプト内に、

以下のコードを貼りましょう。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class wallMaker : MonoBehaviour {

    public GameObject wall;

    // Use this for initialization
    void Start () {
        int[,] map = {
            {1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,1,1,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,1,1,1,1,1,1,1,1}
        };

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if(map[i,j]== 1){
                    Instantiate (wall, new Vector3 (j, 0, i), Quaternion.identity);
                }
            }
        }

            
    }
    
 
}

 

ダンジョンの地形を変えたい場合

 

で、ここで補足ですが、あなたがダンジョンの

地形を好きに変えたい場合があるでしょう。

 

なので補足しときまして、

ダンジョンの地形をいじりたい場合は、

以下の二次元配列の0と1の数字を好きに変えてください。

 

       int[,] map = {
            {1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,1,1,0,1,0,1,0,1},
            {1,0,0,0,1,0,1,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,0,1,1,1,0,0,0,1},
            {1,1,1,1,1,1,1,1,1}
        };

 

というのも1の部分は壁になり、0の部分は道になります。

 

また外周は全部壁にする必要があるので外側の

1は変えずに、中の部分だけ

0と1をあなたの好きなように変えれば地形を変えれます。

 

プレハブをドラッグアンドドロップ

 

で、あとは、コードを保存・実行して、

インスペクター画面に戻ってください。

 

 

するとさっき作ったプレハブを格納する

部分が表示されるので、

 

assetにあるcubeの壁プレハブを、

スクリプトを貼ったオブジェクトの

インスペクター欄の、

 

スクリプトコンポーネントの部分に表示された、

変数名wallのとこにドラッグアンドドロップしましょう。

 

 

ここまでやれば準備okです。

 

あとは上の再生ボタンをクリックして、

実行しましょう。

 

そしてダンジョンが生成されれば成功です。

 

 

スポンサードサーチ

まとめ

 

ということでまとめに入りますが、

unityでダンジョンを作成するには、

 

壁にするCubeのプレハブ

スクリプト内には

 二次元配列(これが実際のダンジョンの地形になります)

 forループとif文組み合わせたInstantiate(これでマップを生成します)

 

で作成可能です。

 

 

今回のダンジョン作成法では、

だいぶコードをシンプル少なめにしながら、

わかりやすくダンジョンを作成する方法を考えたので、

 

ダンジョン作ってみたいって場合は、

本記事を参考にしてやってみてください。

 

 

あなたのダンジョン作成がスムーズに

いけば幸いです。

 

ということで読んでもらってありがとうございました。

でわ。

 

チャーさん

-unity

スポンサードサーチ

関連記事

no image

unityでターン制のゲームを作るにはコレを使いましょう

どうも、チャーさんです。 あなたはunityでターン制ゲームを作りたい そう思っていませんか?   この記事ではunityでターン制のゲームを 作る方法を書いています。   なので …

no image

unityでオブジェクトをスクリプトで削除する方法

どうも、チャーさんです。   あなたはunityでゲームオブジェクトを、 スクリプトなどから削除したいですか?   この記事では、関数を使い、 ゲームオブジェクトを削除する方法を書 …

no image

unityでオブジェクトを回転させる方法「1分でできます」

どうも、チャーさんです。   あなたはunityでオブジェクトを回転させたいですか?   unityでゲームなど作るとオブジェクトを 回転させたい場面がありますよね。   …

no image

[unity]foreach内でget componentを使う方法

どうも、チャーさんです。   この記事ではunityのforeachループで get componentする方法を書きます。     なのでこの記事を読めば、 &nbsp …

no image

unityで敵に近づくと追いかけてくるコードとコードの解説記事

どうも、チャーさんです。   あなたはunityで敵に近づくと、 プレイヤーを追いかけてくるという機能を つけたいと思っていませんか?   この記事ではそれを実現するコードと方法や …

no image

unityで攻撃に当たり判定をつける方法

どうも、チャーさんです。 あなたはunityで攻撃に当たり判定をつけたいですか?   この記事では、当たり判定をつける 方法を書いてるので、読めば当たり判定をつけれます。   とい …

no image

unityでキー入力で攻撃する方法(3分以内にできます)

どうも、チャーさんです。   あなたはunityでキー入力による攻撃を したいですか?   この記事ではunityでキー入力で攻撃を する方法を書いてますので、あなたがこれを読めば …

no image

unityで他のオブジェクトを取得する方法

どうもチャーさんです。   あなたはunityで他のオブジェクトを 取得したいがわからず困ってますか?   この記事では、unityで他のオブジェクトを 取得する方法を書いてます。 …

no image

unityでオブジェクトを移動させたい人は読んでください。

どうも、チャーさんです。   あなたはunityでオブジェクトや、 プレイヤーなど自由自在に移動させたい、 そう思っていませんか?     キーボードの上下左右の矢印ボタ …

no image

unityアセットの使い方を初心者でもわかるように説明。

  どうも、チャーさんです。   あなたはunityのアセットの使い方が、 わからず困ってませんか?   この記事ではunityのアセットの使い方を、 1から説明してます …

no image

blenderで作ったモデルをunityにインポートする方法「簡単です」

どうも、チャーさんです。   あなたはblenderで作ったものを、 unityで表示(インポート)したいと、 思っていませんか?   この記事では、あなたが作ったblenderの …

no image

unityでカメラを追従させる簡単なコードと方法の説明をする記事

  どうも、チャーさんです。   あなたはunityでカメラの追従をさせたい、 こう思ってませんか?   この記事ではオブジェクトをカメラで追従させる、 (カメラが追いか …

no image

unity上でblender作成モデルが透ける時の解決法

どうも、チャーさんです。   あなたはunityにblenderで作ったモデルを 持ってきたものの、面が透ける現象が起こって 困っていませんか?     この記事は、透け …

no image

unityで矢印キーでオブジェクトを移動させるには(3d)

どうも、チャーさんです。 あなたはunityで矢印キーで3dオブジェクトを 移動させたいですか?   この記事では矢印キーによる3dオブジェクトの 移動を実現する方法を書いてるので、 読めば …

no image

unityで地形を作る方法「初心者でもできるように丁寧に説明してます」

どうも、チャーさんです。   あなたはunityでいい感じの地形を作りたい。 でも、やり方がわからない。と悩んでいませんか?   この記事では、unityで地形を作る方法を、 ステ …

最新記事

チャーさん

プログラミング・筋トレ・unity系の記事などを書いてます。

大学卒業後→開業→個人事業主7年目ぐらいです。webサイト制作したり、unityでゲーム開発しております。

youtubeもやってまして、主にプログラミング動画とかunity系の動画をあげてるので見てください。