玉転がしゲームで学ぶunity入門
TRANSCRIPT
玉転がしゲームで学ぶUnity入門
nakamura001
2011/05/15(2011/08/20更新)
※解説を聞きながら見る前提で作成しているスライドです。以下の動画と一緒にご覧下さい。
http://www.ustream.tv/recorded/14715477
床を作る
床を作る• HierarchyにCubeを追加
床を作る• 名前を「Floor」に変更
床を作る• Positionを 0, 0, 0 に変更
床を作る• Scaleを 10, 1, 30 に変更
マテリアルを作成• ProjectにMaterialを追加
マテリアルを作成• 名前を「FloorMaterial」に変更
• 色を選択
マテリアルを作成• HierarchyのFloorにドラッグ
マテリアルを作成• 追加内容はここで確認できます
ライトを追加
ライトを追加• HierarchyにDirectional lightを追加
ライトを追加
• 実際の照らされ具合を見ながら位置や回転を調整
• 例) Position -3, 9, -7、Rotation 38, 0, 0 など
Player(玉)を作成
玉を作成• HierarchyにSphereを追加
玉を作成
• 名前を「Player」に変更
• Positionを 0, 3, -5 に変更
マテリアルを作成
• ProjectにMaterialを追加
• 名前を「PlayerMaterial」に変更
マテリアルを作成• Projectにテクスチャ用の画像ファイルを追加
※玉が回転した時に分り易いものを作成しましょう
例えばこの様な画像 http://d.hatena.ne.jp/nakamura001/files/net.png
マテリアルを作成• PlayerMaterialにテクスチャを設定
マテリアルを作成
• Playerにドラッグ
カメラを設定
カメラの設定
• MainCameraのPositionを 0, 6, -10 に変更
• Rotationを 40, 0, 0 に変更
Player(玉)の動きを作る
Playerの動きを作成• ProjectにJavaScriptを追加
Playerの動きを作成
• 名前をPlayerActionに変更
• Playerにドラッグ
JavaScriptを記述var power = 20.0;
function Update () {! var x = Input.GetAxis("Horizontal") * Time.deltaTime * power;! var z = Input.GetAxis("Vertical") * Time.deltaTime * power;! Debug.Log("x="+x+", z="+z);! transform.Translate(x, 0, z);}
動かしてみよう
動かしてみよう• ここの再生マークをクリックし、ゲームを開始
動かしてみよう• ここに表示されます。カーソルキーで動かしてみましょう
もうちょっとリアリティ欲しい
物理エンジンを使おう
物理エンジンの処理を追加
• Playerを選択した状態でRigidbodyを追加
物理エンジン関連のPackageを取り込む
Projectの余白で右クリック、Import Package→Physic Materials
物理エンジン関連のPackageを取り込む
• デフォルトのまま「import」
物理特性の設定• IceをPlayerのSphere Colliderの
Materialにドラッグ
JavaScriptを変更var power = 80.0;
function Update () {! var x = Input.GetAxis("Horizontal") * Time.deltaTime * power;! var z = Input.GetAxis("Vertical") * Time.deltaTime * power;! Debug.Log("x="+x+", z="+z);! rigidbody.AddForce(x, 0, z);}
動かしてみよう
• ゲームを起動してカーソルを動かしてみましょう
ジャンプさせてみよう
JavaScriptを変更var power = 80.0;var jumpPower = 300.0;
function Update () {! var x = Input.GetAxis("Horizontal") * Time.deltaTime * power;! var z = Input.GetAxis("Vertical") * Time.deltaTime * power;! Debug.Log("x="+x+", z="+z);! rigidbody.AddForce(x, 0, z);! if (Input.GetButtonDown("Jump")) {! ! Debug.Log("Jump");! ! rigidbody.AddForce(0, jumpPower, 0);! }}
動かしてみよう
• ゲームを起動した後にスペースキーを押してジャンプさせてみましょう
ゴールを作成
ゴールを作成• HierarchyにCubeを追加
• 名前を「Goal」に変更
• Positionを 0, 1.4, 0、Scaleを 2, 2, 2 に変更
マテリアルを作成
• ProjectにMaterialを追加
• 名前を「GoalMaterial」に変更
マテリアルを作成
• ShaderにParticles/Additiveを選択(Particles→ Additiveと選択)
• 色に赤を選択
マテリアルを作成• GoalMaterialをGoalにドラッグ
ゲームクリアのテキストを追加
テキストを作成• GUI Textを作成。名前をGameClearに変更
テキストの設定• Textを「GAME CLEAR」に変更
• Anchorを「middle center」に変更
• Font Sizeを「40」に変更
GoalにJavaScriptを追加
JavaScriptを追加• JavaScriptを追加
• 名前をGoalActionに変更
• Goalにドラッグ
JavaScriptを記述private var player: GameObject;private var gameClear: GameObject;
function Start() {! player = GameObject.Find("Player");! gameClear = GameObject.Find("GameClear");! gameClear.active = false;}
function OnCollisionEnter(theCollision : Collision){! if(theCollision.gameObject.name == "Player"){! ! gameClear.active = true;! ! player.rigidbody.Sleep();! ! player.SendMessage("stop");! }}
PlayerのJavaScriptを変更var power = 80.0;var jumpPower = 300.0;var stopFlag = false;
function Update () {! if (stopFlag) return;! var x = Input.GetAxis("Horizontal") * Time.deltaTime * power;! var z = Input.GetAxis("Vertical") * Time.deltaTime * power;! rigidbody.AddForce(x, 0, z);! if (Input.GetButtonDown("Fire1")) {! ! rigidbody.AddForce(0, jumpPower, 0);! ! Debug.Log("hoge");! }}
function stop() {! stopFlag = true;}
おまけ
GetAxis()の引数について
GetAxis()の引数について• GetAxis("Horizontal")の Horizontal などの設定が行われている場所
GetAxis()の引数について
IDEでプログラミングする
MonoDevelop
• UnityはMonoDevelopというC#など向けのIDEと連携する事が出来ます
• MonoDevelopはUnityをインストールした時に一緒にインストールされるので別途インストールする必要はありません
MonoDevelopで使えるようにする
• Unityのメニューの Assets →
Sync MonoDevelop Project を選択するとMonoDevelopで使える様に成ります
Macだと文字化け• MonoDevelopは現在のバージョンでは、
Macで文字化けします。以下のサイトを参考にフォントの設定を変更して下さい
MacのMonoDevelopの日本語表示の文字化けの直し方 - 強火で進めhttp://d.hatena.ne.jp/nakamura001/20110711/1310364725