2013年8月21日水曜日

intをfloatで割るとint

いや、これ、本職のプログラマなら当然だろ!
って感じだと思うんだけど、身の程知らず&経験則だけでプログラム作ってると、こういう単純な計算は意外と疑わないんですよ。

今回は270/100.0が2.7にならなくて困った。

回転部分をやってたから、Quarternionがまーた悪さをしとるな!
って思ってたー!

これ、気付くのに3日かかった!

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);
    }
}