unity3d レベル1 -15ページ目

unity3d レベル1

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


unity3d レベル1 unity3d レベル1


部屋を作って道を伸ばす。

やはりここまでは簡単。

この後の事を考えると頭が痛くなる。。。

こういうのソースとかありそうだから、正解を見てみようって思うんだけど、

どうせ見ても解らないし、コピペして出来ちゃったら寂しいからスルーしちゃう。


考え厨。


unity3d レベル1

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

#pragma strict

var f : int[,];
var n : int;
var xint : int;
var zint : int;

var obj : GameObject;
var waku : GameObject;

var iVec : Vector3;
var rot : Quaternion;


function Start () {
rot = Quaternion.Euler(0,180,0);
f = new int[961,3];
var i : int;
var ii : int;
var w : int;
var h : int;
for(i=0;i<zint;i++){
for(ii=0;ii<xint;ii++){
f[n,0] = 0;
f[n,1] = w;
f[n,2] = h;
n +=1;
w +=1;
}
w = 0;
h-=1;
}
n = 0;

var xx : int;
var zz : int;

for(ii=0;ii<4;ii++){
for(i=0;i<xint;i++){
f[n,0] = 1;
n+=1;
}
n += 279;
}
n=0;
for(ii=0;ii<5;ii++){
for(i=0;i<zint;i++){
f[n,0] = 1;
n+=31;
}
n=ii*10;
}
lastEvent();
}

function lastEvent(){
var i : int;
n = 0;
for(i=0;i<xint*zint;i++){
iVec.x = f[n,1];
iVec.z = f[n,2];
switch(f[n,0]){
case 0:
Instantiate(obj,iVec,rot);
break;
case 1:
Instantiate(waku,iVec,rot);
break;
}
n+=1;
}
}


function Update () {

}

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


やはり見辛い…。

31x31のマスを作って縦横均等に3分割、9個の領域を作る。

一つ一つに面情報と位置情報を付ける。

最終的に順番にマスの面情報によってオブジェクトを生成するようにしてみた。


unity3d レベル1  unity3d レベル1

雑だけど部屋から道を伸ばした。

この道を繋げるために、伸ばした先の座標を取得しなくてはいけないけど、それはまだ出来ていない。

どう格納するべきか。

部屋[番号,方向,座標]?
そこからどっちに道を作るか、"どこまで作るか"はどうやって取得しようか。


room[n]

___

|1|2|3|

|4|5|6|

|7|8|9|


room[n]の右に出来た道はroom[n+1]の左の道を参照。

道が無ければ下か上に行く。

下に行く場合はroom[n+3](下の部屋)かroom[n+4](下の部屋の隣)の上の道を参照。

道を発見したら、そこ(room[n+α,方向,座標)まで道を作っていく。

もし道が繋がったら、その道からはもう道を生成しない。


みたいに書いてみようかな。

領域とか部屋も座標を最初に全部取得しておいて最後に生成 ってやり方にすれば良かったなー。

”プログラムは思い通りに動かない、書いたとおりに動く”ってのをどこかで見て、

単純に”領域確保、部屋生成 繰り返し”ってやってしまった。

スクリプトがぐちゃぐちゃ…。