Unity講習会(初級)

19,609 views

Published on

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

Published in: Technology
  • Be the first to comment

Unity講習会(初級)

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

×