Unity講習会(初級)
-
Upload
torisoup -
Category
Technology
-
view
14.872 -
download
3
description
Transcript of Unity講習会(初級)
Unity講習会(初級)
1
おしながき 1. Unityの概要
2. Unityの用語解説
3. 操作練習
4. 物を作って配置してみる
5. 自分で操作できるキャラクタを作成する
6. FPSカメラを作る
7. TPSカメラを作る(発展課題)
2
概要
3
Unityとは?
ユニティ・テクノロジーズ社製のゲームエンジン ・クロスプラットフォームな開発が可能 -UnityEditor自体がWin/Macで動作 -PC/Web/iOS/Android/コンシューマ機向けにビルドができる
・(プログラミング)初心者からプロまで使える -非プログラマとプログラマが共同で使えるツール
-コードを全く書かずにゲームを作れる(やろうと思えば)
-バージョン管理にも対応(けどブランチをマージするとコンフリクトしまくる)
4
Unityのライセンス
• Free版 – 機能が一部制限されている(プロトタイピングには十分)
– 作成したゲームは自由に公開、販売できる
– ただし収益が年間$10万を超えるならPro版が必要
• Pro版 – Unityの機能をフルで使える
– 凝ったゲームを作るなら必須
– 高い(買い切りが約16万円、月額プランでも月8,100円)
– 1ヶ月の試用ライセンスあり(試用以外の用途でビルドは禁止)
5
Pro版の機能(一部) • 起動時のダサいロゴを変更できる(タイトルロゴ変更)
• MecanimでIKが使える(モデルのアニメーションがそれっぽくなる)
• オーディオにエフェクトが設定できる
• オクルージョンカリングが使用できる(描画時の負荷軽減)
• ポストエフェクトが使用できる(HDR、被写界深度、SSAOとか設定できる)
• プロファイラが使える(描画やスクリプトの実行時間やメモリ使用量のモニタ)
• ネイティブプラグインのインポートができる (Oculus Rift開発するのに必要)
6
基礎編
7
Unityの用語解説
8
Scene ・ゲームを構成する空間 ・画面に描画される領域 9
GameObject ・Scene中に存在する物体全て ・ゲームはGameObjectの相互作用で成り立つ 10
Component ・モジュール化された機能のこと ・GameObjectに貼り付けて使う 11
12
Unity開発の流れ
GameObjectをSceneに配置する
↓
Componentをくっつける(場合によっては自作)
↓
実際に動かして調整
13
実際に操作してみよう
14
New Projectを作成 File→New Project...
15
作成ウィザード Skyboxes.unityPackage
Terrain Assets.unityPackage
にチェックをする(プリインのリソースの読み込み)
16
作成直後
17
ゲームビュー 実行ボタンを押すと実際にここでゲームが動く ビルド不要でデバッグプレイができる
18
シーンビュー Sceneの様子を表示する 実行中はゲームビューと連動する D&DでGameObjectの設置・移動ができる
19
プロジェクトビュー ゲームプロジェクトで扱うリソース一覧 要するにファイルエクスプローラー
20
ヒエラルキービュー Sceneに配置されたGameObjectと その親子(階層)関係を表示する (ゲーム中に存在するオブジェクトは全部ここに出てくる)
21
インスペクタービュー 詳細設定画面 ・GameObjectが持つComponentの管理 ・Componentの設定 ・UnityのProject設定
22
シーンビューを選択
23
シーンビューでのカメラ説明
http://docs-jp.unity3d.com/ Documentation/Manual/SceneView40.html
24
簡単なフィールドを作る Planeを配置して床にする
25
Transform ・GameObjectの位置姿勢を表すComponent ・全てのGameObjectに必ず付与されている Planeをカメラに映る範囲に移動させておく Position=(0,0,0) Rotation=(0,0,0) Scale =(2,1,2)
26
ここで一回実行してみる 薄暗い板が表示される
27
光源を設定
• Directional Lightを設置する – 太陽光と同じ役割をする光源
– 設置位置によらずシーン内の全てを照らす
28
Directional Light ヒエラルキービューから直接作れる
29
光源設置後 フィールドが明るくなっているはず
30
影の設定
31
いろいろ配置してみる
32
いろいろ配置してみる • Cube(箱) • Capsule(カプセル) • Sphere(球体) • Cylinder(円柱) を適当に生成してPlane上に配置してみる (Planeを選択した状態で生成すると配置が楽)
33
配置の操作方法
34
再生してみる 物体が動いてくれない
35
物理演算を有効にする Rigidbodyコンポーネントをつける
36
もう一回再生してみる Rigidbodyを付けた物体だけが動く
37
物理演算とゲーム • 物理演算を有効にすると物理法則に従った動きになる
– 摩擦・重力・空気抵抗を受ける
– Collider(当たり判定)に衝突する
– 衝突すればバウンドするし、運動量の伝達も起きる
– 物理法則に反する動きをさせると挙動が気持ち悪くなる -特に慣性の法則を無視した動きをさせるといろいろ破綻する
38
プレイヤと物理演算 • 操作対象に物理演算を適応するのは止めた方が良い
• 当たり判定が欲しいだけなら専用のComponentがある – CharacterController
• プレイヤを作成するのに特化したComponent
• 移動メソッドの提供
• 当たり判定の自動計算
39
Sceneを保存する • GameObjectの配置やComponent設定が保存される
40
パブリッシュ 成果物をビルドして公開しよう
41
ビルド設定 ビルド対象に含めるSceneを登録する 現在のSceneを追加するならAdd Current
42
対象プラットフォームを選ぶ
Web向け→ Win/Mac向け→
43
ビルド先を決める
44
ビルドできた
45
ね、簡単でしょう?
46
実践編
47
Terrainでフィールドを作る
48
Terrainでフィールドを作る 地形生成機能を使う GameObject→Create Other→Terrain
49
Terrain生成直後
50
光源を設定
• Directional Lightを設置する – 太陽光と同じ役割をする光源
– 設置位置によらずシーン内の全てを照らす
51
Directional Light GameObject -> Create Others -> Directional Light
52
光源の設定 光の向き、明るさ、色などを調整できる
53
Terrainのサイズを変える Terrainのインスペクタービューから変更する
デフォルトでは2km四方 でかすぎるので200x200くらいに
54
地形の高さを上下 Raose / Lower Terrain ・左クリックした場所の地形が盛り上がる ・Shift + 左クリックでは逆に窪む
55
地形の高さを揃える Paint height ・heightで指定した高さにそろえる ・Shiftを押しながらクリックでその地点の高さをスポイト ・Flattenを押すと指定高度でTerrainを平らにする
56
地形を滑らかにする Smooth height ・選択範囲の傾斜を滑らかにする
57
地形にテクスチャを貼る 標準Assetからテクスチャをインポートをする
58
テクスチャ読み込み後
59
テクスチャを貼る PaintTexture ・最初は何もテクスチャが設定されていない ・Edit Textureでテクスチャを追加
60
テクスチャの追加
61
テクスチャの選択 • 現在ロードされているテクスチャ一覧が出てくる
62
テクスチャ設定後 最初に設定したテクスチャが全面に貼られる
63
テクスチャを更に追加 • 同じ要領でテクスチャをTerrainに追加 • 2枚目以降のテクスチャは左クリックで塗っていく
64
木を植える • テクスチャと同じ手順で木のモデルを設定
65
木を植える • 左クリックで植える • Shift+左クリックで除去 • 設置の密度などの設定はスライダで変更
66
草を植える • 木を植える方法と同じなので省略 • 草不可避
67
(おまけ)影のBake • Directional Lightは影のBakeができる • 処理には結構時間がかかる
68
Skyboxを設定する • 空の模様のこと • 標準Assetにいくつか用意されている
69
Skyboxの設定方法 2パターンある ・グローバルで設定 ・カメラ単位で設定 今回はグローバルで設定する
70
RenderSettings ・Edit -> RenderSettings ・インスペクタービューが設定画面になる
71
Skybox設定後
72
(補足)テクスチャとマテリアル • テクスチャ(Texture) – 単純な画像リソース – 拡張子は画像形式( jpg / png / gif ...)
• マテリアル(Material) – 材質(シェーダ)とテクスチャをセットにしたもの – Unityの独自規格ファイルで保存される
73
自機をつくる
74
用意したTerrainと自機がこちら
Assets -> Import Package -> Custom Package 事前配布した「Example.unityPackage」をインポート
75
シーンを開く プロジェクトビュー Assets -> Scene1
76
実行するとこうなる
77
Character Controllerをつける Component -> Physics -> Character Controller
インスペクタービューから 直接Addしてもよい
78
移動スクリプトを貼り付ける プロジェクトビュー -> Script -> PlayerMove インスペクタービューへD&D
79
実行するとカプセルが動く WASD または カーソルキーで移動する
80
InputManager
81
キーアサインを後から変更できる ゲーム起動時にユーザが自由にキーアサインを変更できる
82
スクリプトの解説 • C#、Unity Script、Booに対応
– Mono 2.10(C# 4.0、.NET 4.0相当)
• Mono Behaviourを継承したクラスはComponentとなる – クラス名とファイル名は一致している必要がある
83
スクリプトの編集方法 Assets -> Sync MonoDevelop Project これでC#のプロジェクトファイルが作られる
84
移動スクリプト
85
Start
Start() GameObjectの生成が完了後、 最初にUpdateが実行される直前に1度だけ実行される
86
Update
Update() 各スクリプトで1フレームに1度実行される ゲーム中の挙動は基本的にここに記述する 秒間の実行回数(FPS)はブレることを前提にしておくこと
87
フレーム
・ゲーム内での処理が実行される時間単位
-毎フレーム、ゲームの処理と描画が行われる
・デフォルトでは60fpsぐらい(1秒間に60フレーム)
-フレームはブレるのでぴったり60fpsはでない
・前フレームからの経過時間はTime.deltaTimeでわかる
88
GetComponent
GetComponent 指定したGameObjectが持つComponentを取得する (取得に失敗した場合はnull) 今回は自分自身が持つCharacterControllerへの参照を 取得している
89
Input
Input 入力情報を取得する時に使う GetAxis :仮想ジョイスティックの入力を取得 GetButton:ボタン(キー入力のエイリアス)の状態を取得 GetKey :キーボードのキー状態を取得 Updateの中で実行しないと正しく取得できない GetKeyよりもGetButtonを使おう
90
SimpleMove
CharacterContoller.SimpleMove(Vector3 speed) 対象のGameObjectを水平に移動させる (重力が自動的に加算され入力のY値は無視される) 当たり判定(Collider)にぶつかるとそこで止まってくれる
91
SimpleMoveとMove • SimpleMove
– 水平方向の移動のみを対象(ジャンプはSimpleMoveでは実装できない)
– 重力は自動加算される
– たぶんプロトタイピング用だと思う
– 入力値は速度ベクトル[m/s]
• Move – 3次元空間での移動を対象
– ジャンプ等の立体的な動きをさせることができる
– 重力は自動加算されない(自分で計算する必要がある)
– 入力値は移動量ベクトル[m]
92
FPSカメラ
93
スクリプトを貼り付ける FPSCameraスクリプトをカメラに貼り付ける
94
実行したらカメラが動く マウスの移動に追従してカメラが回転する
95
FPSCameraスクリプト
96
Publicフィールドの扱い
97
インスペクタービューに表示される
publicフィールドは インスペクタービューから書き換えることができる (ゲーム実行中に直接書き換えることもできる)
98
このスクリプトの肝はここ
99
Quaternion
• 四次元数(x,y,z,w)
• 姿勢を表現することができる(軸と角度)
• UnityのQuaternionは構造体(値型扱い)
• Transform.rotationにはQuaternionが入っている – インスペクタービューにはRotationをオイラー角に変換した物が表示されている
Quaternionを使うと回転処理が簡単に書ける
100
Quaternionと回転 Vector3 と Quaternion を掛け算するとベクトルが回転する Quaternion と Quaternion を掛け算すると回転が合成される [回転後のVector3] =[Quaternion]×[元のVector3] [合成後のQuaternion]=[Quaternion]×[元のQuaternion]
演算は順番は掛け算の順番が考慮される (前から掛けないとダメ)
101
Quaternionでいろいろ Quaternion.AngleAxis( 回転角 , 回転軸)で回転させる
102
どう回転させているか
カメラの角度= 横回転 ✕ 縦回転 ✕ 初期回転角度
103
自機とカメラを一緒に動かす
104
やり方1 GameObjectの親子関係を使う ・自機と一緒にくっついて動いてくれる ・自機が回転するとカメラごと回転してしまう(オススメしない)
105
やり方2 スクリプトで自ら追尾させる ・コードを書かないといけないので割りと面倒
・柔軟性は高い
こっちの方法でやります
106
用意したものがこちら
これをカメラに貼り付けて下さい 既に貼り付けてあるFPSCameraは
右クリック→Remove Componentで外して下さい
Assets/Script/Answer/FPSCameraFollowTransform.cs
107
スクリプトの解説 カメラに対象のTransformを入れる変数を作る (publicフィールドにすること)
Assets/Script/Answer/FPSCameraFollowTransform.cs 108
スクリプトの解説 Updateの中で座標を書き換える
Assets/Script/Answer/FPSCameraFollowTransform.cs 109
ターゲットを登録する インスペクタービューから対象をD&Dで登録
110
実行する 実行するとちゃんとカメラが自機を追尾する →でも操作に違和感がある?
111
自機の操作を改善する カメラの向きと進行方向がズレているのが原因 前進キーを押したらカメラの方向へ進むようにする
Assets/Script/Answer/PlayerMoveWithCamera.cs
これをPlayerCapsuleに貼り付けて下さい (既に付いているPlayerMoveはRemoveする)
112
自機にカメラを登録
113
カメラの方向にすすむようになった
114
スクリプトの解説 カメラの向きと自機の移動方向を合わせるために 自機にカメラのTransformを登録できるようにする
115
スクリプトの解説 カメラの向きを基準に入力値のベクトルの向きを変換
116
演習時間
• 発表でカットしたスライドを見る(配布資料を読む)
• TPSカメラにする
• 自機の向きが進行方向を向くようにする
• Terrainで自分で地形を作る
• ジャンプを実装する
Assets/Script/Answer以下にいくつか実装例を置いておきました 117
まとめ
• 今回の内容は初級から中級くらいの内容
• 公式ドキュメントがかなり詳しい
• 時間が無くて話せていない要素が多い – Prefab (GameObjectをプロジェクトビューに保存できる)
– Mecanim(アニメーション管理、再生)
– スクリプト作成の応用編(Prefabの動的な生成とか)
118