unity3d レベル1 -16ページ目

unity3d レベル1

unity3dでゲーム作りはじめました。
http://knr.ifdef.jp/
twitter: @knorsUni

領域を作って、その中に部屋を作成。

unity3d レベル1 unity3d レベル1
unity3d レベル1

バラバラになった?

縦や横が時々綺麗に並んでしまう。

そんで、


unity3d レベル1
壁作って、必ず穴が開くようにした。


今回の作業はやはり簡単だった。

難しいのはここからだ…。


ちょっとTPSタイプの不思議のダンジョン作りたくなってきた。

そんなに見かけない気がする。

息抜きに、挑戦してみる。


不思議のダンジョンの作り方

を検索すると


unity3d レベル1


大体こんなやり方が出てくる。

②は何となく分かる。各領域の左上から何個かずらして部屋を作ればいい。

③も何となく分かる。分割した位置まで1面ずつ道を配置していけばいい。

④は…。自分のスキルでは難解になりそう。


ただ、そんな事より①のやり方がわからない!w

でもやってみた。



unity3d レベル1  unity3d レベル1

unity3d レベル1

それぞれの領域のサイズを取得したかったので

field[n].x = x;

field[n].z = z;

みたいなのをやりたかったけど、どう宣言すればいいのかわからなかった。なので


var field : int[ , ];

field = new int[9,2];


field[n,0] = x;

field[n,1] = z;


って感じでやってみた。

次の段階「部屋作り」は簡単に出来るだろう。多分…!

気になるのは生成する時ちょっと重いこと。


無駄が多いだろうけど自分用バックアップ。縦を作ってから横に生成。

----------------------------------------------------

#pragma strict

var width : int;
var height : int;

var wint : int;
var hint : int;

var vPos : Vector3;
var rot : Quaternion;

var w : int;
var h : int;

var min : int;
var max : int;

var field : int[,];
var index : int;

var n : int;
var obj : GameObject;


function Start (){
w = Random.Range(2,4);
h = Random.Range(2,4);
width = width * w;
height = height * h;
}


function createEvent () {
vPos = Vector3(0,0,0);
rot = Quaternion.Euler(0,180,0);

var a:int;
var i : int;

field = new int[9,2];

//room create
for(i=0;i<w;i++){
hint = height;
vPos.z = 0;
index += 1;
a = Random.Range(min,max);//x
field[i,0] = a;
field[i+3,0] = a;
if(h == 3){
field[i+6,0] = a;
}

a = Random.Range(min,max);//z
field[i,1] = a;
hint -= a;//hint-z
n = i;
fieldEvent();

vPos.x -=field[n,0];
index += 1;
a = Random.Range(min,max);//zz
field[i+3,1] = a;
hint -= a;//hint-z-zz
if(h == 2){
field[i+3,1] += hint;
}
n = i + 3;
fieldEvent();

if(h == 3){
vPos.x -=field[n,0];
index += 1;
a = Random.Range(min,max);//zzz
field[i+6,1] = a;
n = i + 6;
hint -= a;
field[i+6,1] += hint;
fieldEvent();
}
vPos.x += 1;
}
}


function fieldEvent(){
var i : int;
var ii : int;
for(i=0;i<field[n,0];i++){
Instantiate(obj,vPos,rot);
for(ii=0;ii<field[n,1];ii++){
Instantiate(obj,vPos,rot);
vPos.z -=1;
}
vPos.z += field[n,1];
vPos.x += 1;
}
vPos.z -= field[n,1] +1;
}


function Update () {
if(Input.GetKeyDown("i")){
Application.LoadLevel("lab1-1");
}
if(Input.GetKeyDown("a")) createEvent();
}

------------------------------------------------


み、見辛い…。


unity3d レベル1

作っている途中で、つまらないものだと気づく。(うわああああああ