Your SlideShare is downloading. ×
Unity講習会(初級)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Unity講習会(初級)

13,284
views

Published on

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

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

Published in: Technology

0 Comments
33 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,284
On Slideshare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
75
Comments
0
Likes
33
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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