Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゲーム開発研修(ハンズオン学習編)【ミクシィ22新卒技術研修】

B16717ef4b7aab0b253d933c3934f280?s=47 mixi_engineers
PRO
April 25, 2022
32

 ゲーム開発研修(ハンズオン学習編)【ミクシィ22新卒技術研修】

22新卒技術研修で実施したゲーム開発研修の講義資料(ハンズオン学習編)です。
動画も後日公開予定です。

※こちらの資料のハンズオン用リポジトリは公開していないので、ハンズオンを実際に試していただくことはできません。

<< ゲーム開発研修資料一覧 >>
イントロダクション
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-00-introduction

Unity基礎編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-01-quaternion

Photon編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-02-photon

ハンズオン学習編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-03-hands-on-study

ハンズオン実践編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-04-hands-on-practice

プログラミング教育LT編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-05-lt

C#ハンドブック編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-06-handbook-c-number

VS Codeセットアップ編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-07-vs-code-setup

Unity実装テクニック編
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-08-unity-technic

アイテム取得課題 成功例
https://speakerdeck.com/mixi_engineers/2022-game-development-training-number-09-survival-athletic-answer

B16717ef4b7aab0b253d933c3934f280?s=128

mixi_engineers
PRO

April 25, 2022
Tweet

More Decks by mixi_engineers

Transcript

  1. 22's 新卒者研修ゲーム開発 action game development with Unity <1.学習編> 株式会社ミクシィ

  2. オンラインプレイ・アクションゲームをつくろう

  3. 学習編

  4. ジャンルによる制 約の違い 1. シミュレーション系:育成/防衛/ ADV/都市開発 a. 同期方法:(主に)HTTPサーバー b. 通信頻度:少(定点、タイマー)/同期精度:低くていい(アクション時に最新ならいい) c.

    データコスト:計算量/データ量は比較的大きくていい d. マッチング:不要/データサーバー単位/データサーバー内の全ユーザーにアクセス可能 2. ターン制:麻雀将棋囲碁トランプ/個人技スポーツ/ビリヤード/ a. 同期方法:(主に)リレーサーバー b. 通信頻度:少(アクション毎にリレー)/同期精度:低くていい(ターン切り替わり時に最新ならいい) c. データコスト:サーバーロジックは原則使用できない/データ量は少 d. マッチング:マッチングサーバーでグループ作成 3. バトル・アスレチックアクション:対戦スポーツ/対戦アクション/アスレチック a. 同期方法:(主に)リレーサーバー/ゲームサーバー(次項) b. 通信頻度:高(秒間n回)/同期精度:高(常時同期) c. データコスト:より小さい/1パケットサイズ以下( MTU=パケットサイズ、ヘッダー込み 1パケット 1500 bytes ) d. マッチング:マッチングサーバーでグループ作成( Unityでは、PhotonCloudで 8 人推奨、その他でも 64 人程度) 4. MMO・メタバース:<ここは専門ではないので省略> a. 同期方法:ゲームサーバー b. データコスト:より小さい/1パケットサイズ以下 c. マッチング:不要/データサーバー単位/データサーバー内の全ユーザーにアクセス可能
  5. 一般的な ゲームサーバーの 役割 1. HTTPサーバー a. 計算をサーバーで行い不正を排除 b. 他者と同期するデータが中央集権 2.

    リレーサーバー a. 接続ユーザー間での単純データ受け流し b. 原則はサーバーロジックなし 3. ゲームサーバー a. (近年あえてHTTPサーバーと区別している) b. クライアント処理相当の計算判定をサーバー側で一任し中央集権 (不可視で全ユーザー分) c. 計算をサーバーで行い不正を排除 d. UnityではBuldSettingに「ServerBuild」チェックがある e. コストは爆上がりするが同期性能と不正排除の銀の弾丸 4. マッチングサーバー a. リレーサーバー・ゲームサーバーの場合使用
  6. リレー サーバー の遅延 ローカル情報リレー時の伝わり方例

  7. ゲーム サーバー の遅延 ゲームサーバーにキー情報送付時の伝わり方例

  8. Photonの CustomProperty の活用 1. 活用例 a. 小さな共有データストレージとしての利用 b. update properties通知の同期イベントとしての利用

    c. propertiesListedInLobbyを用いたルーム参加前の概要情報として の利用 i. 全ての例> stage設定、stage進捗情報、userバフ、user テータス 、参加者list 2. Code a. PhotonPlayer i. Hashtable CustomProperties [get] /PhotonPlayer.SetCustomPropertiesから設定 b. RoomInfo i. Hashtable CustomProperties [get] /Room.SetCustomPropertiesから設定 ii. string [] propertiesListedInLobby
  9. Photonの InterestGroup の活用 1. 活用例 a. 並列する個別グループチャット b. エリア/シーン別同期情報の分割 c.

    個別通信 2. Code a. PhotonNetwork.SetInterestGroups() i. 傍受グループIDの指定(複数指定可、 0は未指定全域) ii. PhotonNetwork.Instantiate() / group引数で指定 iii. PhotonNetwork.RaiseEvent() /sendoption引数で指定
  10. 構築

  11. 主な Component 構成

  12. MonoBehaviour https://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.html MonoBehaviour呼び出し順  https://docs.unity3d.com/ja/2019.4/Manual/ExecutionOrder.html MonoBehaviour の呼び出し順

  13. コリジョン というもの Collider https://docs.unity3d.com/ja/current/ScriptReference/Collider.html

  14. レイキャストの話 1. Raycast / Spherecast Raycast https://docs.unity3d.com/ja/current/ScriptReference/Physics.Raycast.html Spherecast https://docs.unity3d.com/ja/current/ScriptReference/Physics.SphereCast.html

  15. Monobehaviour の活用 1. Inspectorで状態確認できて良 2. Awake/Start/Update/OnDestory/OnEnable/OnDisable 便利 3. 計算コスト/初期化コスト高 4.

    大量にインスタンス化するものは単独 classかstructで
  16. Unityの scene活用 1. 活用例 a. フィールド環境objectをmain scene、gamesystem / ui をそれぞれ追加

    scene Loadして合成する i. フィールドsceneを別々に設け単独 Loadではgamesystem component を均一の状態に維持できない ii. componentの付与仕様が不要なため分業し専念しやすくなる iii. 別のunity project /maya projectでasset作成importしやすくなる iv. OccousionやBakeLightingまわりが参照できる(後述) 2. Code a. using UnityEngine.SceneManagement; i. SceneManager.LoadSceneAsync(name, LoadSceneMode.Single) ii. SceneManager.LoadSceneAsync(name, LoadSceneMode.Additive) 3. Hierarchy以外の情報/MainScene時に参照 a. Lighting(LightSetting/Enviroment/BakedLightmap) b. Occlusion Culling(不可視領域を演算しない処理) c. など
  17. Mecanimの活用 i. Code 1. Animator https://docs.unity3d.com/ja/current/ScriptReference/Animator.html 2. Animator.SetTrigger() 3. Animator.SetBool()

    4. Animator.SetFloat() 5. Animator.SetInteger()
  18. エディタ拡張 の活用

  19. Batches/ SetPass call とAtlasの活用

  20. ifdef (イフデフ) の活用 1. 条件コンパイル( ifdef、#define #if )を積極的に活用する a. Platform別処理(win/mac/android/ios/webgl)

    b. DevelopBuild用処理/Releaseビルドから開発機能排除 c. 同リポジトリ(バージョン)で複数種別 Build出力 i. 商用機能付加・削減版/過去機能の置き換え/
  21. ヒープメモリと つきあうGC 1. ヒープメモリをなるべく変化させない 2. GarbageCollection 略してGC

  22. bit演算 結構使う 1. 確認 a. 1 << 0 // 1

       0000 0001 (byte) b. 1 << 1 // 2    0000 0010 (byte) c. 1 << 2 // 4    0000 0100 (byte) d. 1 << 3 // 8    0000 1000 (byte) e. 1 << 4 // 16    0001 0000 (byte) f. 1 << 5 // 32    0010 0000 (byte) g. 1 << 6 // 64    0100 0000 (byte) h. 1 << 7 // 128    1000 0000 (byte) i. 1 << 8 // 256 0001 0000 0000 (short) … j. 1<<15 // 32,768 1000 0000 0000 0000 (int) 2. Unityの (int) layermask の指定 a. 対象のみ LayerMask layerMask = 1 << LayerMask.NameToLayer("layer 1"); // 左シフト b. 対象以外 LayerMask layerMask = ~(1 << LayerMask.NameToLayer("layer 1") ); // 反転 c. and  LayerMask layerMask = 1 << 0 | 1 << 1; 3. enumの[Flags]attribute付加+enum値bit指定によってbit化し複数選択Statusを簡単に作る
  23. テクニック集 (別紙 Unityテクニック集.pdf にて) 1. 距離の測り方 2. 対象への振り向き方 3. 対象から見た固定位置の取り方

    4. 速度の保ち方 5. 遅延追従 6. クリック2D座標の3D座標変換 7. 3d座標の2D座標変換 8. 2つの3Dオブジェクトをカメラ表示領域に自動で納めるカメラviewport.rect 9. エディタ拡張、スライダー、テキストエリア、インスペクター変更、ウィンドウ 作成 10. ランパラメータの取り出しコンテキストメニュー 11. テキスト保存 12. エディタ拡張
  24. None