Unityで超入門3Dゲームを作ってみる
初めまして。SONICMOOVでフロントエンジニアをやってるRENです。
最近は自宅でも会社でもUnity漬けなのでこの機会に当ブログに今までなかったUnityに触れてみたいと思います。
環境
Mac Book Pro OS 10.8
Unity4.0(レイアウトは変わってしまいますがFreeの3.5でも構いません
Unityで何ができるのか
Unity は、Windows と OS X 上で動作する統合型のゲーム開発環境です。
「iOS、Android、Windows、Mac OS X、Web、Wii U、PlayStation3、Xbox 360」など、様々なプラットフォームへ向けた高度な 3D アプリケーションを制作することが出来ます。
iOS/Android用で開発をしたならば、ほとんど手を加えることなく両者を同じソースで動作させることができ、 同時リリースも少ない工数で実現することができます。
開発に使用する言語は「C#、UnityScript(JSの拡張言語)、Boo」となっており複数使うことも可能。
Unityで開発するメリットは、それほどの知識がなくてもドラッグ&ドロップで手軽に3Dデータが 扱うことができ、物理エンジンをすぐに導入できること。
プログラミング知識がなくとも目でオブジェクトの実装が可能であり、すぐに動作させることも可能なので レベルデザインに時間をかけずに開発することが可能です。
サンプルを動かしてみる
言葉で説明しているのもつまらないのでまずは動かしてみましょう。
UnityをここからDLして起動するとサンプルプロジェクトが起動します。
(クリックで拡大画像が標示されます)
ウィンドウがいくつか分割されています。簡単に説明すると
①Scene
ゲームワールドを視覚的に表示したもの。ここにオブジェクトを配置して世界を作ります。
②Game
カメラに映っている範囲を表示しています。実際のプレイ画面はここに表示されている画面になります。
③Project
Unityでは1つのゲームを1つのプロジェクトとして扱います。ここにゲームで使用するScriptなどを格納します。
④Hierarchy
Project Viewがゲームで現在利用可能なオブジェクトの一覧。
⑤Inspector
オブジェクトの詳細な情報を表示します。
画面上部の再生ボタンを押してみてください。ゲームが実行されるはずです。
どうでしょうか?方向キーで移動でき、スペースを押すとマウスカーソルの位置に銃を撃ちます。
ここまでのものはすぐにはできませんが、今回は入門編として簡単なコインゲームを作成します。
初めてのゲームの作成
MenuのFileより「New Project」を選択し、新しくプロジェクトを作成してください。
土台を配置
HierarchyViewのCreateタブをクリックし、Cubeを選択します。
そうするとSceneViewに配置されますので、HierarchyViewでCubeを選択したままInspectorでTracsformのpositionをxyz共に0に設定します。
(クリックで拡大画像が標示されます)
カメラの中に入ったのでGameViewにも表示されたと思います。
ライトの設置
何か暗いですね。ライトがないからです。ライトを配置します。
HierarchyViewから今度はDirectional lightを選択します。InspectorのRotationの値を変更すると向きが代わり、ライトのあたり具合にも変化が出ると思います。
InspectorよりCubeのScaleを(5, 1 ,5)に変更し、大きさを変えます。
→ (x, y ,z)
HierarchyViewのCubeの上で右クリックし、Duplicateをクリックして複製します。何も起きてないように見えますが重なっているだけです。InspectorのPositionで値を次のように変更します。
→ Position(0, 1, 2) Scale(5 , 1, 3)
見づらくなってきたのでMian Cameraも変更します。
→ Position(0, 4, -8) Rotate(20 , 0, 0)
スクリプト入力
これで土台とプッシャーが配置されました。スクリプトを入力してプッシャーを動かしましょう。
あ、Cubeが二つでわかりづらいのでReNameしておきましょう。HierarchyViewで対象を右クリックでできます。それぞれPusherとWallにします。
物理を適用する
Rigidbodyを追加します。
Unity ではオブジェクトに rigidbody を追加することで物理的な意味で個体として扱えるようになります。
HierarchyViewでPusherを選択し、Component→Physics→Rigidbody を追加。
Wallも同じように適用します
試しにボタンを押してみてください。
落下します。というのも重力が適用されたようなものです。でも困りますね。落下しないようにしましょう。
InspectorでRigitbodyにある、「Is Kinematic」にチェックを入れる。
これでOKです。ちゃんとPusherとWall両方やってください。
どうなるの?マニュアルによると
Is Kinematic にチェックの入っているRigidbodyオブジェクトは物理学エンジンによって運転されず、
そのTransformによってのみ操作することができます。
物質だけど勝手に動かすな、動かしたいときは自分でTransformをいじりますよ〜〜〜のチェックボックスです。プレイを押すとその場にとどまると思います。
さて、ここからスクリプトを作成します。
ProjectView>Create>C#Scriptをクリックし、Pusherという名前にします。ダブルクリックでエディターが起動しますので、少し見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[sourcecode lang="text"] using UnityEngine; using System.Collections; public class Pusher : MonoBehaviour { // StartはUpdateかFixedUpdateの最初の呼出の直前に実行される。 // 主に初期処理を記載したりします。 void Start () { } // フレームが更新されるたびに Unity エンジンから // Update() メソッドが呼び出されます。 // このメソッドの中に、オブジェクト自身を更新する // コードを記述すれば、常にオブジェクトの状態が最新に保たれます。 void Update () { } } [/sourcecode] |
ではここに実装を行いましょう。以下のように記入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[sourcecode lang="text"] using UnityEngine; using System.Collections; public class Pusher : MonoBehaviour { // default position private Vector3 origin; void Start () { // set default position origin = rigidbody.position; } // Update is called once per frame void Update () { Vector3 offset = new Vector3 (0, 0, Mathf.Sin (Time.time)); rigidbody.MovePosition (origin + offset); } } [/sourcecode] |
保存したらUnityに戻り、ドラッグでPusherオブジェクトにアタッチします。
(クリックで拡大画像が標示されます)
実行すると動くはずです。
スクリプトの内容について
スクリプトの簡単な説明ですが、初期位置を最初に保持しておいて、Update関数の中でZ軸だけSin関数を使用して変更しているだけです。
コイン作成
さてそろそろ終盤です。コインを作ります。
HierarchyView> Create> Cylinderを生成します。Scaleを(1, 0.1, 1)とします。
デフォルトでは当たり判定がCapsule Colliderを使っているので丸になってしまっている。これをコインの形と同じにするために変更します。
InspectorViewにCylinder Colliderみたいなものがあるので右は時にある矢印ボタンを押して[Remove Component]をクリックして削除。
Component→Physics→Mesh Colliderを追加
Mesh Colliderの処理は重いので、Convexにチェックを入れる。
凸型の形状の場合は処理速度が改善されるらしい。
名称をCoinに変更。
Rigidbodyを追加します。is Kinematicにはチェックしないでください。
次に色を変えます。
ProjectViewでCreate > Material で生成。
InspectorでMain Colorを黄色っぽく変更し、MaterialをHierarchyViewのCoinにドラッグで適用します。
ここで実行するとコインは落下してWallにとどまる、Pusherに押されるまでの一連を体験出来ると思います。
(クリックで拡大画像が標示されます)
長くなったので、今回はここまでにしたいと思います。
あとはコインのクリックでコインを生成していくだけです!!
が、その前にPrefubという概念を覚えないといけません。そんな難しくないのでググれば分かると思います。複製に向いているものはPrefubにしよう〜〜ってだけです。
と、入門向けなものを記載しました。
次回はスマホアプリを作るならここに注意せよ的なTipsを記載していこうと思います。
スマホは端末のスペックが低いのでいろいろ考慮しなきゃと大変です。
参考にスマホ向けに私が練習で作成したアプリです。
このときはUnity覚えて1ヶ月たってません。
私でできるので頑張ればすぐにこれくらいはできます。
目指せUnityマスターー