Unity3d 入門 04 「スクリプト」

今回はオブジェクトを「スクリプト」で制御する方法について説明します。


まず、オブジェクトの光源・カメラ・床そして球を設置します。
Project ビューの Create > C# Script から
新しいスクリプトコンポーネントを作ります。
そしてこのスクリプトを、オブジェクト球の Inspector 内にドラッグして貼り付けます。
(ドラッグする際は、Inspector ビューの右の鍵を忘れずに)


続いて、MonoDevelop などでこの新しいスクリプト NewBehaviourScript を編集してみましょう。
まず、前回のおさらい。
以下のように書き、ゲームを実行すると球は右に動いていきます。
this.transform.position にはこの球の位置が格納されており、
X 方向に少しずつ値を足すと、右に動いていく・・・というカラクリです。

public class NewBehaviourScript : MonoBehaviour {
	void Start () {
		m_Frame = 0;
	}
	void Update () {
		this.transform.position += new Vector3(0.1f, 0, 0);
	}
}


次に球を膨張させてみましょう。
以下のように書きゲームを実行すると・・。
this.transform.localScale には大きさの値が格納されているのです。

public class NewBehaviourScript : MonoBehaviour {
	void Start () {
	}	
	void Update () {
		this.transform.localScale += new Vector3(0.1f, 0.1f, 0.1f);
	}
}


では色を変更してみましょう。
単に変更するだけでなく点灯する感じにしたいと思います。

public class NewBehaviourScript : MonoBehaviour {
	const int FrameMax = 360;
	private int m_Frame;
	
	void Start () {
		m_Frame = 0;
	}
	void Update () {
		float red = Mathf.Sin((float)m_Frame/(float)FrameMax * Mathf.PI * 2.0f);
		Color color = new Color(Mathf.Abs(red), 0.0f, 0.0f, 1.0f);
		this.renderer.material.SetColor("_Color", color);		
		m_Frame++;
	}
}

色のデータは、renderer.material に格納されているので、
ここに setColor 関数を使って設定しています。


スクリプトで制御できるのは、
スクリプトが貼り付けられたオブジェクトだけでしょうか?
違います。
以下のように、オブジェクトを検索することで
別のオブジェクトに対しても制御することができます。

public class NewBehaviourScript : MonoBehaviour {
	void Start () {
	}
	void Update () {
		GameObject o = GameObject.Find("Plane");
		if(o != null) o.transform.position += new Vector3(0, 0.01f, 0);
	}
}

どんどん床が上がってきています!

このようにスクリプトを使うことで
オブジェクトを思いのままに動かすことができるようになるのです!

Unity3d 入門 03 「コンポーネント」

前回はゲームオブジェクトについてでしたが、
今回は「コンポーネント」についてです。
コンポーネントは、ゲームオブジェクトに付与できる
「動作を定義するもの」あるいは「属性」といったものです。


まず、カメラ・床・球・光源を配置します。

ここでゲームを実行します。
何も動きません。

ここで、Hierarchy 内の球を選択し、
メニューの Component > Physics > Rigidbody を押します。
そうすると、この球の Inspector に Rigidbody のコンポーネントが追加され、
物理演算が行われるようになります。
ゲームを実行すれば球は床に落ちます。

では、この球の Inspector からコンポーネントを削除したらどうなるでしょう?
試しに、Sphere Collider を消してみます。

なんと球は床を突き抜けて落ちて行ってしまいました。
そうです、このコンポーネントは衝突判定を行うものだったのです。


続いて Material についてです。
これは正確に言うとコンポーネントじゃないかもしれませんが、
都合がいいのでここで取り上げます。
Project ビューの Create から Material を押します。
そうすると新しい New Material が Project ビュー内に現れます。

続いて、この New Material を選択し、
Inspector ビュー内の色などをいじります。
(ここではしませんが、テクスチャを付けることもできます。)

そして、この Material を貼り付けたいオブジェクトを Hierarchy から選びます。
注意なのが、ここで Inspector 右の鍵をかけます。
これによって別のオブジェクト・コンポーネントを選択しても Inspector の対象は変更になりません。
先ほどの New Material を Mesh Renderer > Materials > Element 0 にドラッグします。

そうすると球の色が変わりました!
このようにすることで、オブジェクトの色や模様を変更することができます。


最後は Script です。
Material と同じく Project ビューの Create > C# Script を押します。
Javascript でもできることは同じなのですが好みの問題です。

そして新しくできた NewBehaviourScript を開きます。
そうすると、MonoDevelop あるいは VisualStudio が起動し、
このスクリプトを編集できるようになります。
以下のように書き加えます。

public class NewBehaviourScript : MonoBehaviour {
	// Use this for initialization
	void Start () {
	}
	// Update is called once per frame
	void Update () {
		this.transform.position += new Vector3(0.1f, 0.0f, 0.0f);
	}
}

新しく球のオブジェクトを追加し、その Inspector に NewBehaviourScript をドラッグします。
これによって、この球にスクリプトが適用されるようになりました。

ゲームを実行すると、
新しい白い球は
緑の重力で落ちていく球とは別方向に動いていくのが見えると思います。

今回書いたスクリプトは1行ですが
ゲームが大きくなるに従ってスクリプトの行数はどんどん増えていきます!

Unity3d 入門 02 「ゲームオブジェクト」

Unity3d でゲームを構成する最小要素をゲームオブジェクトと呼びます。
例えば、球や箱、円柱であったり、光源であったり、それらを撮影するカメラであったりです。
そして、Unity3d にはあらかじめ用意された汎用的なゲームオブジェクトがあり、
これを配置していくだけでも様々なシーンを作ることができます。


まず、メニューの GameObject > Create Other > Sphere から球を加えてみます。

続いて、メニューの GameObject > Create Other > GUI Text を押してみましょう。
あれ、何も出てきません・・・。
ちょっと、Scene view から Game view に変えてみましょう。
ありました!

このように、GUI Text や GUI Texture は Scene 中には表示されませんが、
Game view にだけ表示されます。


さらに、メニューの GameObject > Create Other > Particle System を押してみましょう。

ブツブツが出てきました。
ちょっと小さいので、Inspector > Ellipsoid Particle Emitter 内
Min Size と Max Size を大きくしてみましょう。
これは1つのパーティクルの大きさを調整します。

白くてモクモクする塊になりました。
今度は、Rnd Velocity の値をすべて2にしてみましょう。
これはパーティクルが広がっていく速さの調整です。

白いパーティクルが全方位に広がっていくようになりました。
その他、Particle Animator 内の Color Animation を調整すると、
パーティクルの色を変更することができますし、
Particle Renderer 内の Materials を変更することで、
円状のパーティクルだけでなく、星型などのも表示できるようになります。
ちょっとパラメタをいじるだけでもきれいですね!

Unity3d 入門 01 「まずは動かしてみよう」

海外だと流行っているけど日本だと下火な Unity3d について
説明していこうと思います。
あと、自分への備忘録。


Unity3d のダウンロード、アクティベーションについては、省略。


起動するとこんな感じの画面が出てきます。

左上の「手」「矢印」などのアイコンで、視点を変えたり、オブジェクトを動かしたりできます。
真ん中上の「横矢印」「停止」などのアイコンでは、ゲームの実行・一時停止などを行います。
左下の Hierarchy では、現在配置しているオブジェクトの一覧が表示されます。
右下の Project では、画像や3Dモデルなどの素材の一覧が表示されます。
右の Inspector は、現在選択しているオブジェクトの詳細が見れます。

さっそく、オブジェクトを配置していきましょう。
メニューの GameObject > Create Other > Plane
で床を配置しましょう。

続いて、GameObject > Create Other > Cube, Directional Light で
箱と光源も配置しましょう。この時、ちょっと箱は床から浮かしておきます。


さあ、横矢印の実行ボタン押してみましょう。
そうすると、Game 実行画面に変わり、ゲームが実行され・・・、
・・・箱は動きません。

なぜでしょうか?
この箱に物理演算をさせる、重力の影響を受けさせる、という処理が入っていないからです。
さっそく、物理演算をさせてみましょう。
まず、Hierarchy 上で Cube を選択します。
続いて、メニューの Component > Physics > Rigidbody を選びます。
そうすると、この Cube の Inspector に Rigidbody が追加表示されます。
ここでもう一回、横矢印の実行ボタン押してみると・・・。

箱がポトンと落ちました!


このように Unity3d では本来なら多くの知識が必要で手間もかかることも、
コンポーネント1つで簡単に実現できるようになっています。
しかもタダで!

2011年08月24日のツイート

2011年08月23日のツイート

2011年08月22日のツイート