2013年7月24日水曜日

ビルトインぼやき

サイズの変更できないビルトイン配列ってのがありますね。

で、定義の仕方は、こう。
var hairetu = new int[10];
これで、int用の10列の配列ができるわけです。

ところが・・・・
var hairetu : int[];
こういう宣言も可能なわけですが・・・

これって長さ「0」のサイズ変更出来ない配列っていう意味なんじゃないんですか???

それ、意味無くないですか?

回転に続き、配列の挙動に右往左往な日々でございます。

2013年7月17日水曜日

AwakeがStartに負けた!

前提:
static varにドラッグしてGameIbjectを登録できなかった。
普通のvarに入れてから改めでstaticに代入してた。

こんな感じ。
どの関数にも入れてないから、Awakeで実行されるはずー。
static var num :int =8;
var objsTmp =new GameObject[num];
static var objs =new GameObject[num];
for (var l:int=0; l<num; l++){
objs[l] = objsTmp[l];
}

(ちなみに、staticの配列を定義する時に使っている"num"をstaticにしないで使うと、
上記"objsTmp"には使えるけれど、staticなobjsでは使えない!)


と、こ、ろ、が!

Startでこれを利用しようとしたら、何故かnullが帰ってくる。

Updateを使って代入タイミングをみると最初のフレームではまだnullのまま。
あれー?
Awake > Start > Update
の順で実行されるんじゃなかったっけ?
ちなみに、最初の1フレーム目だけnullで後は正常に代入されていた。


Updateでも間に合ってないって...

とりあえずStartを最初にyieldしたら読めた。
なんでこうなるのかわかんないけど、動くからいいかー。

追記=========
これは、間に合ってないんじゃなかった。

オブジェクトA・・・変数をAwakeで定義するスクリプトを保持
オブジェクトB・・・オブジェクトAの変数をStartで参照

という構成だったので、つまりはオブジェクトの表示タイミングが違ったために起こったわけです。
最初からシーンに表示していても、これは起こるので、現在は、オブジェクトAのAwake処理の最後に、終了フラグを仕込んで、オブジェクトBのスクリプトのStartはそちらのフラグを見て実行するように変更しています。

2013年7月15日月曜日

Unity:2次元配列

配列についてはいずれまとめて書きたいけど、今のところ困っていた二次元配列ができたのでメモ。

var test :int[,];
test = new int[10,10];
test[1,1]=2;
print(test[1,1]);


ちなみに、何に困っていたのかというと、二次元配列にGameObjectとbooleanを混ぜて入れようとしてた。
けどまあ、上記の書き方を見ればわかるけど、違う要素を一緒にはやっぱりできない。
GameObjectへの参照と、そのGameObjectの状態を一緒に格納しようと思ったんだけど・・・。
つまり、二次元配列って複数の配列を束ねるものだと思ってた

ちなみに、以下の記述方法だとダメだった。

var test = int[10,10];

2013年7月14日日曜日

Blenderはおいといて・・・

結局、ちょっとBlenderを勉強しながらやってると、プログラムが進まないので、Unityで仮組みしてしまうことにした。

しかし・・・・BlenderよりUnityの方がオブジェクトの配置とか楽なのはなんで・・・

Unity:マテリアルの色を変える

こんな感じ。
本当はマテリアル自体を変更したかったんだけど・・・。
怪我の功名ということです。

//マテリアルは後で直接指定する
var mat : Material;
var index : int = 0;

function Start ()
{
//とりあえず最初は青
//"=Color"でマテリアルのどのプロパティを変更するのか決める
//Color.blueでどの色にするか決める。この記述方法はラクチンでいい。
mat.SetColor("_Color", Color.blue);
}

//とりあえず、ボタンを押すと色が変わる。
function Update ()
{
    if (Input.GetMouseButtonDown(2))
    {
        index++;
        if (index > 1) index = 0;
        if (index == 1) mat.SetColor("_Color", Color.red);
        if (index == 0) mat.SetColor("_Color", Color.blue);
    }
}

2013年7月10日水曜日

Blender四苦八苦:スケーリング

BlenderのスケールがUnityに持ってくると消える!

例えばキューブを、スケールを使って棒にしたとすると、Unityではキューブに戻っちゃう。
棒を作りたければ、EditModeでVertexをいじらないきゃだめ!

まあ、何にせよスケーリングは色々と悪さをするから、全部1なのにこした事は無いんだけど・・・

Blender四苦八苦:モデルのスムージング

Blenderでやったオブジェクトのスムージングが
Unityに継承されない!

調べたところ・・・
http://forum.unity3d.com/threads/130542-Flat-Shading-in-Blender-Imported-Mesh

ダメみたい!

エッジをスプリットしろって・・・

BlenerのオブジェクトはUnityに持ってゆくと、全部スムージングがかかった状態になります。

BlenderのファイルをUnityで直接読む

http://d.hatena.ne.jp/tueda_wolf/touch/20120120/p1

UnityのAssetフォルダにブチ込めば読めるらしい。

...

読めました。
あっけなく。

テクスチャなんかは別途張り込まなければならないけど、UVは来てるから楽チン。

気がかりなのは、.blndファイルがマテリアルとかテクスチャを内臓してること。
ファイルが壊れたら一発アウト。
あと、容量的にも不利なんじゃないかなー。調べてないけど。

でも、とりあえずテンション上がった!
Blenderの扱いにはまだ心が折れがちだけど。

2013年7月8日月曜日

2013年7月7日日曜日

2013/7/7

大雑把に作りたいゲームの流れだけ考えた

でも

細かい部分のプログラムを書こうと思ったら

必要なオブジェクトを作らざるを得ない

けど自宅に使い慣れた3Dソフトが無い

というわけで

Blenderのチュートリアルをこなした

モデリングはひと通り
マテリアルを当てたところまで

次回

テクスチャ

アニメーション

2013年7月1日月曜日

Blenderチュートリアル開始

3DモデリングにはBlenderを使ってみることにしました。

Blenderはとりあえず、見た目がいい!



で、チュートリアルがあったので、開始しました。
http://www.blender3d.biz/index.html

んですが・・・
AutoDesk製の3Dソフトを使っていると、Maya/XSI/Maxそれぞれショートカットキーが違っていてイライラしていたものです。
しかし!Blenderのショートカットは違いすぎ!

あと、テンキーショートカット必須!

ノートPCで作業しているので、ビューの切り替えもままならないんですよ。
(ビューの切り替え系は全てテンキー使用)

あと、マウスの使い方変すぎ!

右クリックで選択?

はまだいいとして・・・

左クリックは謎の「3Dカーソル」とやらの移動。
なんだそれ!
答えはPivotが常に出ているという状態なんですがね。

先が思いやられますよ。

普段お高いソフトを使っていて、これからBlender触ってみようという人は、フリーソフトのヤンチャぶりに驚くといいと思いますよ。

---<追記>2013/7/7
あの変なセンターカーソルとやらをリセットするには、
Shift_C