Unity講習会(初級)

118
Unity講習会(初級) 1

description

追記した資料はこちら https://speakerdeck.com/tori/unityjiang-xi-zi-liao

Transcript of Unity講習会(初級)

Page 1: Unity講習会(初級)

Unity講習会(初級)

1

Page 2: Unity講習会(初級)

おしながき 1.  Unityの概要

2.  Unityの用語解説

3.  操作練習

4.  物を作って配置してみる

5.  自分で操作できるキャラクタを作成する

6.  FPSカメラを作る

7.  TPSカメラを作る(発展課題)

2

Page 3: Unity講習会(初級)

概要

3

Page 4: Unity講習会(初級)

Unityとは?

ユニティ・テクノロジーズ社製のゲームエンジン ・クロスプラットフォームな開発が可能  -UnityEditor自体がWin/Macで動作  -PC/Web/iOS/Android/コンシューマ機向けにビルドができる

・(プログラミング)初心者からプロまで使える  -非プログラマとプログラマが共同で使えるツール

 -コードを全く書かずにゲームを作れる(やろうと思えば)

 -バージョン管理にも対応(けどブランチをマージするとコンフリクトしまくる)

4

Page 5: Unity講習会(初級)

Unityのライセンス

•  Free版 –  機能が一部制限されている(プロトタイピングには十分)

–  作成したゲームは自由に公開、販売できる

–  ただし収益が年間$10万を超えるならPro版が必要

•  Pro版 –  Unityの機能をフルで使える

–  凝ったゲームを作るなら必須

–  高い(買い切りが約16万円、月額プランでも月8,100円)

–  1ヶ月の試用ライセンスあり(試用以外の用途でビルドは禁止)

5

Page 6: Unity講習会(初級)

Pro版の機能(一部) •  起動時のダサいロゴを変更できる(タイトルロゴ変更)

•  MecanimでIKが使える(モデルのアニメーションがそれっぽくなる)

•  オーディオにエフェクトが設定できる

•  オクルージョンカリングが使用できる(描画時の負荷軽減)

•  ポストエフェクトが使用できる(HDR、被写界深度、SSAOとか設定できる)

•  プロファイラが使える(描画やスクリプトの実行時間やメモリ使用量のモニタ)

•  ネイティブプラグインのインポートができる    (Oculus Rift開発するのに必要)

6

Page 7: Unity講習会(初級)

基礎編

7

Page 8: Unity講習会(初級)

Unityの用語解説

8

Page 9: Unity講習会(初級)

Scene ・ゲームを構成する空間 ・画面に描画される領域 9

Page 10: Unity講習会(初級)

GameObject ・Scene中に存在する物体全て ・ゲームはGameObjectの相互作用で成り立つ 10

Page 11: Unity講習会(初級)

Component ・モジュール化された機能のこと ・GameObjectに貼り付けて使う 11

Page 12: Unity講習会(初級)

12

Page 13: Unity講習会(初級)

Unity開発の流れ

GameObjectをSceneに配置する

Componentをくっつける(場合によっては自作)

実際に動かして調整

13

Page 14: Unity講習会(初級)

実際に操作してみよう

14

Page 15: Unity講習会(初級)

New Projectを作成 File→New Project...

15

Page 16: Unity講習会(初級)

作成ウィザード  Skyboxes.unityPackage

 Terrain Assets.unityPackage

 にチェックをする(プリインのリソースの読み込み)

16

Page 17: Unity講習会(初級)

作成直後

17

Page 18: Unity講習会(初級)

ゲームビュー 実行ボタンを押すと実際にここでゲームが動く ビルド不要でデバッグプレイができる

18

Page 19: Unity講習会(初級)

シーンビュー Sceneの様子を表示する 実行中はゲームビューと連動する D&DでGameObjectの設置・移動ができる

19

Page 20: Unity講習会(初級)

プロジェクトビュー ゲームプロジェクトで扱うリソース一覧 要するにファイルエクスプローラー

20

Page 21: Unity講習会(初級)

ヒエラルキービュー Sceneに配置されたGameObjectと その親子(階層)関係を表示する (ゲーム中に存在するオブジェクトは全部ここに出てくる)

21

Page 22: Unity講習会(初級)

インスペクタービュー 詳細設定画面 ・GameObjectが持つComponentの管理 ・Componentの設定 ・UnityのProject設定

22

Page 23: Unity講習会(初級)

シーンビューを選択

23

Page 24: Unity講習会(初級)

シーンビューでのカメラ説明

http://docs-jp.unity3d.com/ Documentation/Manual/SceneView40.html

24

Page 25: Unity講習会(初級)

簡単なフィールドを作る Planeを配置して床にする

25

Page 26: Unity講習会(初級)

Transform ・GameObjectの位置姿勢を表すComponent ・全てのGameObjectに必ず付与されている Planeをカメラに映る範囲に移動させておく Position=(0,0,0) Rotation=(0,0,0) Scale =(2,1,2)

26

Page 27: Unity講習会(初級)

ここで一回実行してみる 薄暗い板が表示される

27

Page 28: Unity講習会(初級)

光源を設定

•  Directional Lightを設置する – 太陽光と同じ役割をする光源

– 設置位置によらずシーン内の全てを照らす

28

Page 29: Unity講習会(初級)

Directional Light ヒエラルキービューから直接作れる

29

Page 30: Unity講習会(初級)

光源設置後 フィールドが明るくなっているはず

30

Page 31: Unity講習会(初級)

影の設定

31

Page 32: Unity講習会(初級)

いろいろ配置してみる

32

Page 33: Unity講習会(初級)

いろいろ配置してみる •  Cube(箱) •  Capsule(カプセル) •  Sphere(球体) •  Cylinder(円柱) を適当に生成してPlane上に配置してみる (Planeを選択した状態で生成すると配置が楽)

33

Page 34: Unity講習会(初級)

配置の操作方法

34

Page 35: Unity講習会(初級)

再生してみる 物体が動いてくれない

35

Page 36: Unity講習会(初級)

物理演算を有効にする Rigidbodyコンポーネントをつける

36

Page 37: Unity講習会(初級)

もう一回再生してみる Rigidbodyを付けた物体だけが動く

37

Page 38: Unity講習会(初級)

物理演算とゲーム •  物理演算を有効にすると物理法則に従った動きになる

–  摩擦・重力・空気抵抗を受ける

–  Collider(当たり判定)に衝突する

–  衝突すればバウンドするし、運動量の伝達も起きる

–  物理法則に反する動きをさせると挙動が気持ち悪くなる -特に慣性の法則を無視した動きをさせるといろいろ破綻する

38

Page 39: Unity講習会(初級)

プレイヤと物理演算 •  操作対象に物理演算を適応するのは止めた方が良い

•  当たり判定が欲しいだけなら専用のComponentがある –  CharacterController

•  プレイヤを作成するのに特化したComponent

•  移動メソッドの提供

•  当たり判定の自動計算

39

Page 40: Unity講習会(初級)

Sceneを保存する •  GameObjectの配置やComponent設定が保存される

40

Page 41: Unity講習会(初級)

パブリッシュ 成果物をビルドして公開しよう

41

Page 42: Unity講習会(初級)

ビルド設定 ビルド対象に含めるSceneを登録する 現在のSceneを追加するならAdd Current

42

Page 43: Unity講習会(初級)

対象プラットフォームを選ぶ

Web向け→ Win/Mac向け→

43

Page 44: Unity講習会(初級)

ビルド先を決める

44

Page 45: Unity講習会(初級)

ビルドできた

45

Page 46: Unity講習会(初級)

ね、簡単でしょう?

46

Page 47: Unity講習会(初級)

実践編

47

Page 48: Unity講習会(初級)

Terrainでフィールドを作る

48

Page 49: Unity講習会(初級)

Terrainでフィールドを作る 地形生成機能を使う  GameObject→Create Other→Terrain

49

Page 50: Unity講習会(初級)

Terrain生成直後

50

Page 51: Unity講習会(初級)

光源を設定

•  Directional Lightを設置する – 太陽光と同じ役割をする光源

– 設置位置によらずシーン内の全てを照らす

51

Page 52: Unity講習会(初級)

Directional Light GameObject -> Create Others -> Directional Light

52

Page 53: Unity講習会(初級)

光源の設定 光の向き、明るさ、色などを調整できる

53

Page 54: Unity講習会(初級)

Terrainのサイズを変える Terrainのインスペクタービューから変更する

デフォルトでは2km四方 でかすぎるので200x200くらいに

54

Page 55: Unity講習会(初級)

地形の高さを上下 Raose / Lower Terrain ・左クリックした場所の地形が盛り上がる ・Shift + 左クリックでは逆に窪む

55

Page 56: Unity講習会(初級)

地形の高さを揃える Paint height ・heightで指定した高さにそろえる ・Shiftを押しながらクリックでその地点の高さをスポイト ・Flattenを押すと指定高度でTerrainを平らにする

56

Page 57: Unity講習会(初級)

地形を滑らかにする Smooth height ・選択範囲の傾斜を滑らかにする

57

Page 58: Unity講習会(初級)

地形にテクスチャを貼る 標準Assetからテクスチャをインポートをする

58

Page 59: Unity講習会(初級)

テクスチャ読み込み後

59

Page 60: Unity講習会(初級)

テクスチャを貼る PaintTexture ・最初は何もテクスチャが設定されていない ・Edit Textureでテクスチャを追加

60

Page 61: Unity講習会(初級)

テクスチャの追加

61

Page 62: Unity講習会(初級)

テクスチャの選択 •  現在ロードされているテクスチャ一覧が出てくる

62

Page 63: Unity講習会(初級)

テクスチャ設定後 最初に設定したテクスチャが全面に貼られる

63

Page 64: Unity講習会(初級)

テクスチャを更に追加 •  同じ要領でテクスチャをTerrainに追加 •  2枚目以降のテクスチャは左クリックで塗っていく

64

Page 65: Unity講習会(初級)

木を植える •  テクスチャと同じ手順で木のモデルを設定

65

Page 66: Unity講習会(初級)

木を植える •  左クリックで植える •  Shift+左クリックで除去 •  設置の密度などの設定はスライダで変更

66

Page 67: Unity講習会(初級)

草を植える •  木を植える方法と同じなので省略 •  草不可避

67

Page 68: Unity講習会(初級)

(おまけ)影のBake •  Directional Lightは影のBakeができる •  処理には結構時間がかかる

68

Page 69: Unity講習会(初級)

Skyboxを設定する •  空の模様のこと •  標準Assetにいくつか用意されている

69

Page 70: Unity講習会(初級)

Skyboxの設定方法 2パターンある ・グローバルで設定 ・カメラ単位で設定 今回はグローバルで設定する

70

Page 71: Unity講習会(初級)

RenderSettings ・Edit -> RenderSettings ・インスペクタービューが設定画面になる

71

Page 72: Unity講習会(初級)

Skybox設定後

72

Page 73: Unity講習会(初級)

(補足)テクスチャとマテリアル •  テクスチャ(Texture) – 単純な画像リソース – 拡張子は画像形式( jpg / png / gif ...)

•  マテリアル(Material) – 材質(シェーダ)とテクスチャをセットにしたもの –  Unityの独自規格ファイルで保存される

73

Page 74: Unity講習会(初級)

自機をつくる

74

Page 75: Unity講習会(初級)

用意したTerrainと自機がこちら

Assets -> Import Package -> Custom Package 事前配布した「Example.unityPackage」をインポート

75

Page 76: Unity講習会(初級)

シーンを開く プロジェクトビュー Assets -> Scene1

76

Page 77: Unity講習会(初級)

実行するとこうなる

77

Page 78: Unity講習会(初級)

Character Controllerをつける Component -> Physics -> Character Controller

インスペクタービューから 直接Addしてもよい

78

Page 79: Unity講習会(初級)

移動スクリプトを貼り付ける プロジェクトビュー -> Script -> PlayerMove インスペクタービューへD&D

79

Page 80: Unity講習会(初級)

実行するとカプセルが動く WASD または カーソルキーで移動する

80

Page 81: Unity講習会(初級)

InputManager

81

Page 82: Unity講習会(初級)

キーアサインを後から変更できる ゲーム起動時にユーザが自由にキーアサインを変更できる

82

Page 83: Unity講習会(初級)

スクリプトの解説 •  C#、Unity Script、Booに対応

–  Mono 2.10(C# 4.0、.NET 4.0相当)

•  Mono Behaviourを継承したクラスはComponentとなる –  クラス名とファイル名は一致している必要がある

83

Page 84: Unity講習会(初級)

スクリプトの編集方法 Assets -> Sync MonoDevelop Project これでC#のプロジェクトファイルが作られる

84

Page 85: Unity講習会(初級)

移動スクリプト

85

Page 86: Unity講習会(初級)

Start

Start() GameObjectの生成が完了後、 最初にUpdateが実行される直前に1度だけ実行される

86

Page 87: Unity講習会(初級)

Update

Update() 各スクリプトで1フレームに1度実行される ゲーム中の挙動は基本的にここに記述する 秒間の実行回数(FPS)はブレることを前提にしておくこと

87

Page 88: Unity講習会(初級)

フレーム

・ゲーム内での処理が実行される時間単位

  -毎フレーム、ゲームの処理と描画が行われる

・デフォルトでは60fpsぐらい(1秒間に60フレーム)

  -フレームはブレるのでぴったり60fpsはでない

・前フレームからの経過時間はTime.deltaTimeでわかる

88

Page 89: Unity講習会(初級)

GetComponent

GetComponent 指定したGameObjectが持つComponentを取得する (取得に失敗した場合はnull) 今回は自分自身が持つCharacterControllerへの参照を 取得している

89

Page 90: Unity講習会(初級)

Input

Input 入力情報を取得する時に使う GetAxis  :仮想ジョイスティックの入力を取得 GetButton:ボタン(キー入力のエイリアス)の状態を取得 GetKey  :キーボードのキー状態を取得 Updateの中で実行しないと正しく取得できない GetKeyよりもGetButtonを使おう

90

Page 91: Unity講習会(初級)

SimpleMove

CharacterContoller.SimpleMove(Vector3 speed) 対象のGameObjectを水平に移動させる (重力が自動的に加算され入力のY値は無視される) 当たり判定(Collider)にぶつかるとそこで止まってくれる

91

Page 92: Unity講習会(初級)

SimpleMoveとMove •  SimpleMove

–  水平方向の移動のみを対象(ジャンプはSimpleMoveでは実装できない)

–  重力は自動加算される

–  たぶんプロトタイピング用だと思う

–  入力値は速度ベクトル[m/s]

•  Move –  3次元空間での移動を対象

–  ジャンプ等の立体的な動きをさせることができる

–  重力は自動加算されない(自分で計算する必要がある)

–  入力値は移動量ベクトル[m]

92

Page 93: Unity講習会(初級)

FPSカメラ

93

Page 94: Unity講習会(初級)

スクリプトを貼り付ける FPSCameraスクリプトをカメラに貼り付ける

94

Page 95: Unity講習会(初級)

実行したらカメラが動く マウスの移動に追従してカメラが回転する

95

Page 96: Unity講習会(初級)

FPSCameraスクリプト

96

Page 97: Unity講習会(初級)

Publicフィールドの扱い

97

Page 98: Unity講習会(初級)

インスペクタービューに表示される

publicフィールドは インスペクタービューから書き換えることができる (ゲーム実行中に直接書き換えることもできる)

98

Page 99: Unity講習会(初級)

このスクリプトの肝はここ

99

Page 100: Unity講習会(初級)

Quaternion

•  四次元数(x,y,z,w)

•  姿勢を表現することができる(軸と角度)

•  UnityのQuaternionは構造体(値型扱い)

•  Transform.rotationにはQuaternionが入っている –  インスペクタービューにはRotationをオイラー角に変換した物が表示されている

Quaternionを使うと回転処理が簡単に書ける

100

Page 101: Unity講習会(初級)

Quaternionと回転 Vector3 と Quaternion   を掛け算するとベクトルが回転する Quaternion と Quaternion を掛け算すると回転が合成される [回転後のVector3]  =[Quaternion]×[元のVector3] [合成後のQuaternion]=[Quaternion]×[元のQuaternion]

演算は順番は掛け算の順番が考慮される (前から掛けないとダメ)

101

Page 102: Unity講習会(初級)

Quaternionでいろいろ Quaternion.AngleAxis( 回転角 , 回転軸)で回転させる

102

Page 103: Unity講習会(初級)

どう回転させているか

カメラの角度= 横回転 ✕ 縦回転 ✕ 初期回転角度

103

Page 104: Unity講習会(初級)

自機とカメラを一緒に動かす

104

Page 105: Unity講習会(初級)

やり方1 GameObjectの親子関係を使う ・自機と一緒にくっついて動いてくれる ・自機が回転するとカメラごと回転してしまう(オススメしない)

105

Page 106: Unity講習会(初級)

やり方2 スクリプトで自ら追尾させる ・コードを書かないといけないので割りと面倒

・柔軟性は高い

こっちの方法でやります

106

Page 107: Unity講習会(初級)

用意したものがこちら

これをカメラに貼り付けて下さい 既に貼り付けてあるFPSCameraは

右クリック→Remove Componentで外して下さい

Assets/Script/Answer/FPSCameraFollowTransform.cs

107

Page 108: Unity講習会(初級)

スクリプトの解説 カメラに対象のTransformを入れる変数を作る  (publicフィールドにすること)

Assets/Script/Answer/FPSCameraFollowTransform.cs 108

Page 109: Unity講習会(初級)

スクリプトの解説 Updateの中で座標を書き換える

Assets/Script/Answer/FPSCameraFollowTransform.cs 109

Page 110: Unity講習会(初級)

ターゲットを登録する インスペクタービューから対象をD&Dで登録

110

Page 111: Unity講習会(初級)

実行する 実行するとちゃんとカメラが自機を追尾する   →でも操作に違和感がある?

111

Page 112: Unity講習会(初級)

自機の操作を改善する カメラの向きと進行方向がズレているのが原因 前進キーを押したらカメラの方向へ進むようにする

Assets/Script/Answer/PlayerMoveWithCamera.cs

これをPlayerCapsuleに貼り付けて下さい (既に付いているPlayerMoveはRemoveする)

112

Page 113: Unity講習会(初級)

自機にカメラを登録

113

Page 114: Unity講習会(初級)

カメラの方向にすすむようになった

114

Page 115: Unity講習会(初級)

スクリプトの解説 カメラの向きと自機の移動方向を合わせるために 自機にカメラのTransformを登録できるようにする

115

Page 116: Unity講習会(初級)

スクリプトの解説 カメラの向きを基準に入力値のベクトルの向きを変換

116

Page 117: Unity講習会(初級)

演習時間

•  発表でカットしたスライドを見る(配布資料を読む)

•  TPSカメラにする

•  自機の向きが進行方向を向くようにする

•  Terrainで自分で地形を作る

•  ジャンプを実装する

Assets/Script/Answer以下にいくつか実装例を置いておきました 117

Page 118: Unity講習会(初級)

まとめ

•  今回の内容は初級から中級くらいの内容

•  公式ドキュメントがかなり詳しい

•  時間が無くて話せていない要素が多い –  Prefab (GameObjectをプロジェクトビューに保存できる)

–  Mecanim(アニメーション管理、再生)

–  スクリプト作成の応用編(Prefabの動的な生成とか)

118