ドットインストールの「Unity入門」でUnityに入門してみる
はじめに
Unityのインストール
- ダウンロード
- インストール
- 起動
プロジェクトの作成
- [File] > [New Project]
- [Set] で新しいプロジェクト用のディレクトリを(作成して)指定
- [Create Project] で作成
- デフォルトで立ち上がっているプロジェクト「AngryBots.unity」を保存するか聞かれるので [Don't Save]
構成要素説明
- Scene: 画面 / ウィンドウの"Scene"に表示
- GameObject: 画面上のもの / プレイヤー、敵、背景など / ウィンドウの"Hierarkey"に
- Component: GameObjectの位置や属性や振る舞いなどの要素 / "Hierarkey"で選択したGameObjectのものが"Inspector"に表示
- Assets: 画像や3Dモデルなどの共通部品 / "Project"の"Assets"に表示
シーンの保存
- [File] > [Save Scene]
GameObjectの作成
- "Hierarkey"の"Create"から種類を指定して作成
- 立方体の"Cube"を作成
視点の移動
- 画面左上の手のひらアイコンで"Scene"上の視点の移動
- 左上のアイコンは手のひらから順にショートカットキーの q / w / e / r に対応
- ドラッグで平面の移動
- option + ドラッグで角度の移動
- 二本指スワイプ上下でズームインズームアウト
- Scene右上の立方体と円錐6つのアイコンでも切り替え可能
- x, y, z に対応する円錐をクリックで、その軸からの視点に切り替え
- 立方体をクリックで、遠近法のon/off
- shift + クリックで、いい感じに斜め上からの視点に切り替え、よくわかんなくなったらこれ
GameObjectの移動
- 十字矢印アイコン(ショートカットキー:w)でGameObjectの移動
- x, y, z 軸をドラッグで、軸にそって平行移動
- 真ん中をドラッグで任意の移動
GameObjectの回転
- 円型矢印アイコン(ショートカットキー:e)でGameObjectの回転
- 移動と同じ要領で、軸にそった回転と、任意の回転
GameObjectの拡大縮小
- 一番右のアイコン(ショートカットキー:r)でGameObjectの拡大縮小
- 移動と同じ要領で、軸にそった拡大縮小と、任意の拡大縮小
位置情報コンポーネント Transform を使う
- "Hierarkey"の"Cube"選択で、"Inspector"に"Cube"にひもづく"Component"が表示される
- "Transform"が位置情報のComponentなので、ここからもGameObjectの位置を変更できる
- わからなくなったら、Position を 0, 0, 0 で、Rotation を 0, 0, 0 で、Scale を 1, 1, 1 にすると、とりあえず真ん中に来る
- x, y, z などのラベルは、ドラッグするとスライダー的に数値の変更ができる
- カメラを中央に持ってきて、移動して回転して、Cubeを映してみる、カメラの映像はSceneの右下にプレビューが出る
- 現在のSceneで表示している視点に、カメラの位置と角度を合わせたい場合は、Hierarkeyからカメラを選択して、メニューから [GameObject] > [Align With View] を選択する
色情報コンポーネント Material を使う
- Assets を右クリック、[Create] > [Material] で新規の Material Component の作成
- 名前を Floor に変更
- Inspector から Main Color で色を選択して変更
- Floor コンポーネントを、Hierarkey の Cube にドラッグアンドドロップで、Component の割当
- Hierarkey の Cube を Floor という名前に変更
- Floor オブジェクトの Transform コンポーネントの Scale を 10, 1, 10 とかにして床っぽくする
- Floor コンポーネントに画像を貼付ける
- Assets に画像を追加
- Floor の Inspector の None(Texture) と書いてあるボックスに、画像をドラッグアンドドロップ
- Tiling で縦横の貼付ける枚数を指定
物理エンジン情報コンポーネント Rigidbody を使う
- 球体を作って床の上に落とす
- Hierarkey に球体の GameObject、Sphere を追加
- 名前を Ball に
- Position を 0, 10, 0 にして、床の真上に
- Inspector の Add Component から、Rigidbody コンポーネントを追加して、物理特性を付与
- [Add Component] > [Physics] > [Rigidbody]
- Mass が重量、100 に
- Use Gravity が重力の影響を受けるかどうか
- 画面上部中央の再生ボタンをクリックで、ボールが床に落ちる、もう一度再生ボタンをクリックで終了
- ボールがはねるようにするには、Physics Material を作成して、Ball オブジェクトに割り当てる必要がある
- Assets 右クリックで [Create] > [Physics Material] で作成し、名前を BallMaterial にする
- Inspector の Bounciness を 0.9 にすると弾性がつく
Directional Light を使う
- Hierarkey > Create > Directional Light で、全方位的に太陽みたいに照らすライトを作成
- 再生モードに入るとライトに照らされて色が出ているのがわかる
- 再生モード中もオブジェクトの移動などができるが、このときにした変更は、再生モード終了時に破棄されるので注意
- 再生モード中のウィンドウ色は [Unity] > [Preference] の [Colors] から、Playmode tint のカラーパレットで変更可能。ここで灰色からピンクとかにすると再生モード中だとわかりやすいというが、目が痛い
GameObjectの階層
- HierarkeyでGameObjectを別のGameObjectにドラッグアンドドロップすると親子にできる
- 親子のオブジェクトは同時に移動、回転する
- 親子でなく並列にしたい場合は、[GameObject] > [Create Empty] で空のオブジェクトを作って、そこに入れる
Prefab を使う
- GameObjectをHierarkeyからAssetsにドラッグアンドドロップすると、使い回しのできる部品になる。これをPrefabという
- PrefabをSceneにドラッグアンドドロップすると、コピーがシーン上に作られる
- Prefabへの変更(Componentの追加など)は、シーン上のコピーすべてに反映される
Script の追加
- GameObjectの操作などをするスクリプトは、Component として作成して、GameObject に割り当てる
- Script の作成は Assets > Create > Script
- 割当は、Assets のコンポーネントを、GameObject にドラッグアンドドロップ
はじめての Script
- Script Component の Inspector から open でエディタを開く
- Start は起動時の処理、Update はゲームループ中の処理
- 変数宣言は var x : int = 5;
- グローバル変数は Inspector から初期値の変更が可能
- ログは Debug.Log() で表示
- 最新のログは左下に出る / ログコンソールは [Window] > [Console] で出現
ユーザー入力を受け付ける
- Input.GetButtonUp("Jump") が真ならスペース押下
- "Jump" が space キーになっているのは、[Edit] > [Project Setting] > [Input] の [Positive Button] で確認できる
- var x : int = Input.GetAxis("Horizontal"); transform.Transelate(x * 0.2, 0, 0); で左右キー入力でオブジェクトの移動。
- Horizontal に左右キーが割り当てられている
- transform.Translate() でオブジェクトの移動
衝突判定をする
- RigidbodyのConstrainsは位置と回転の固定
- 回転なしで、x軸しか動かない場合は Freeze Position の y, z と Freeze Rotation の x, y, z にチェックを入れる
- 衝突判定には Rigidbody を割り当てたオブジェクトのスクリプトで OnCollisionEnter() を定義する
- 引数で obj : Collision を受け取れ、obj.gameObject.name で衝突相手の GameObject の名前がとれる
動的に GameObject を作成する
OnGUI を使う
別のシーンを呼び出す
- Application.LoadLevel("GameOver"); でシーンの遷移ができる
- シーンの遷移が発生する場合は、[File] > [Build Settings] で使用するシーンをすべて登録する必要がある
ゲームを書き出す
- [File] > [Build Settings] でシーンの並びを Main, GameOver にして、Platform を PC で、[Build And Run]
- 画面サイズを 640 x 480 にして、Windowed にチェックをして [Play!] で実行できる