[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
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.cs108
スクリプトの解説
Updateの中で座標を書き換える
Assets/Script/Answer/FPSCameraFollowTransform.cs109
ターゲットを登録する
インスペクタービューから対象を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

More Related Content

Unity講習会(初級)