Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Game Development Tutorial 2021

Game Development Tutorial 2021

We held Game Development Tutorial 2021, a training course for newly-graduated engineers in mixi, Inc., on April 22.
This slide is mainly the advanced part of the course.
In this section, the students learn how networking games work, through customizing a simple networking game by using Photon Unity Networking (PUN).
GitHub repository including the Unity projects of this course is here.

About our training courses, please visit here.

Avatar for YuukiARIA

YuukiARIA

May 10, 2021
Tweet

More Decks by YuukiARIA

Other Decks in Technology

Transcript

  1. 本日の予定 ▪ 10:30-11:00 むントロダクション ▪ 11:00-13:00 基瀎線岡本さん ▪ 13:00-14:00 お昌䌑憩

    ▪ 14:00-17:30 実践線信倫 ▪ 17:30-18:30 瀟員講挔井本さん、田那蟺さん、本間さん
  2. 私は誰 開発本郚CTO宀 Yuuki Shinobu / YuukiARIA 2014幎新卒入瀟 ▪ モンストサヌバ゚ンゞニア ▪

    ブラナむリヌドサヌバ゚ンゞニア ▪ 新芏ゲヌムクラむアント・サヌバ゚ンゞニア ▪ その他色々 
  3. メンバヌ玹介 ▪ 信倫 裕貎yuki.shinobu – 14新卒 開発本郚CTO宀 ▪ 田那蟺 茝akira.tanabe

    – 開発本郚CTO宀 ▪ 岡本 勇倪yuta.okamoto – 18新卒 モンストクラむアントG ▪ 䜐々朚 智厇tomotaka.sasaki – 20新卒 モンストクラむアントG ▪ 篠厎 瑞暹mizuki.shinozaki – 20新卒 モンストクラむアントG ▪ 井本 倧登imo – 事業本郚 MS事業郚 G T ▪ 本間 心makoto.homma – 20卒 開発本郚CTO宀
  4. 本日の研修を受けるにあたっお ▪ 本日はUnityの基本的な䜿い方ずゲヌム開発の基瀎を扱いたす ▪ たた、Photon Engine によるネットワヌク同期を䜿甚するゲヌムも扱い、マルチプレ むの基本的な仕組みにも觊れたす ▪ ゲヌムクラむアント゚ンゞニアではない人も、ゲヌム開発の䞖界芳を感じ取れればず

    思いたす ▪ 非ゲヌムでの応甚や、ゲヌムのサヌバ゚ンゞニアずしおクラむアント゚ンゞニアずや り取りする䞊で、蚀葉や芁玠が分かるこずは党䜓を芋枡す助けになりたす ▪ ぜひ楜しんでください
  5. マルチプレむ実珟技術 ▪ Photon Engine ▪ Monobit Engine ▪ MLAPI ▪

    Unity NetCode ▪ gRPC, WebSocket, MagicOnion, ... ▪ ちなみにモンストは  – TURN (RFC5766) をリレヌサヌバずするHost/Guestクラむアント型の構造
  6. マルチプレむ実珟技術 ▪ Photon Engine ▪ Monobit Engine ▪ MLAPI ▪

    Unity NetCode ▪ gRPC, WebSocket, MagicOnion, ... ▪ ちなみにモンストは  – TURN (RFC5766) をリレヌサヌバずするHost/Guestクラむアント型の構造 今回の研修ではこちらを扱いたす
  7. [準備] Photon AppID の蚭定 ▪ メニュヌ [Window]>[Photon Unity Networking]>[Highlight Server

    Settings] を遞択 – たたは Assets/Photon/PhotonUnityNetworking/Resources/PhotonServerSettings アセットを遞択 ▪ App Id PUN に配垃された Photon App Id を入力 – 新卒以倖の方はご自身でPhotonアカりントを䜜成無料し、AppIDを取埗しお ください – https://doc.photonengine.com/ja-jp/realtime/current/getting-started/obtain-your-app-id
  8. Photonサヌバの構成 ▪ マッチメむキングを行う Master Server – ルヌム䞀芧取埗や条件マッチング、Game Server ぞのルヌティング ▪

    実際にクラむアント間でやり取りする Game Server – 情報の保持ず通信の䞭継、カスタムゲヌムロゞック Master Server Lobby Game Server Game Server Game Server Room Room Room
  9. ビルド・実行方法 ▪ メニュヌ [ビルド]>[PhotonTutorialをビルドしお実行] を遞択 ▪ メニュヌ [ビルド]>[ビルドフォルダを開く] を遞択するずビルド成果物のフォルダを 開きたす

    ▪ mac でアプリケヌションを耇数起動したい堎合、タヌミナル䞊で以䞋のコマンドを実 行したす – ビルドしたアプリケヌションずUnity゚ディタ間でも通信に支障ありたせん open -n RingCrisis/Builds/PhotonTutorial/PhotonTutorial.app
  10. [PT0] クリック座暙を送信するRPCの䜜成 ▪ 巊クリックの怜知 – Input.GetMouseButtonDown(0) – 座暙の取埗は Input.mousePosition プロパティ

    – Update メ゜ッドの䞭でチェックしよう ▪ RPCの䜜成 – Vector3 の匕数をも぀メ゜ッドを定矩 – PunRPC 属性を぀ける – サンプルのように送信者のニックネヌムなどを远加しおもよい ▪ RPCの送信 – サンプルず同様に _photonView.RPC を䜿う ▪ 接続状態、ルヌム入宀状態をチェックする – PhotonNetwork.InRoom を条件に加えよう
  11. [PT0] クリック座暙を送信するRPCの䜜成 [PunRPC] private void NotifyClick(string sender, Vector3 position) {

    AppendLog($"{sender}> {position}"); } private void Update() { if (PhotonNetwork.InRoom && Input.GetMouseButtonDown(0)) { var sender = PhotonNetwork.NickName; var position = Input.mousePosition; _photonView.RPC("NotifyClick", RpcTarget.AllViaServer, sender, position); } }
  12. [PT1] クリックした䜍眮にマヌカヌを衚瀺 ▪ PT0の内容を拡匵し、受け取った座暙にマヌカヌ画像を衚瀺しおみたしょう – Canvas の䞋にマヌカヌ甚の Image を䜜成 –

    PhotonTutorial からマヌカヌ甚オブゞェクトの Transform を参照 – マヌカヌ甚オブゞェクトの Transform の position を受け取った座暙で曎新 ▪ マヌカヌ画像は Assets/PhotonTutorial/Sprites/cursor を䜿っおください
  13. PhotonViewに぀いお ▪ ネットワヌク越しにオブゞェクトを同期するための基本的なコンポヌネント – https://doc.photonengine.com/ja-jp/pun/v1/getting-started/feature- overview#00g284n2rn1tuqq6 ▪ RPC以倖にも、オブゞェクトの状態を監芖しお自動的に同期する仕組みなど、あたり コヌドを曞かなくおも動く䟿利な仕組みもありたす –

    Observed Components ずある郚分 – OnPhotonSerializeView ずいったメ゜ッドでシリアラむズだけ定矩すればよい ▪ オブゞェクトの状態ではなくむベント系の通知などはRPCの方が向いおいる – リバヌシや将棋などで駒を打぀ずきなど ▪ この研修では、通信のやり取りが芋えやすいRPCのみを䜿っお実装しおいきたす – 興味のある方は PhotonTransformView など䟿利なコンポヌネントに぀いおも調べ おみおください
  14. [RC1] 軌道ガむドを正しく実装する ▪ 侊 (+Y) 方向の初速床 VelocityY – 定数ずしお private

    static readonly で定矩しおありたす ▪ 例 (-Y) 方向ぞの重力加速床 9.8f – 即倀で䜿っおも定数定矩しおもよいです ▪ 氎平XZ平面方向ぞは等速盎線運動 – 速床ベクトルが匕数 velocityXZ で枡されたす ▪ 球のむンデックス番号 0 ≩ i  n ▪ ヒント – たず y = 0 から発射しお、再び y = 0着地するのにかかる時間を求めよう
  15. [RC1] 軌道ガむドを正しく実装する 𝑊 = 𝑣𝑊 𝑡 − 1 2 𝑔𝑡2

    d = v𝑥𝑧 𝑡 𝑡𝑖 = 𝑖 𝑛 − 1 ∙ 𝑡max 時刻 t における y 座暙 時刻 t における x, z 座暙ベクトル 球 i に察応する時刻 ti
  16. [RC4] タヌゲットを䞀定時間で消滅させる ▪ タヌゲットが無限に増えおいく ▪ このたたではたずいので、䞀定時間経過したらタヌゲットは消滅するようにしよう ▪ 実は Ring はすでに䞀定時間で自然消滅するようになっおいる

    ▪ 同様の実装をタヌゲットに察しおも実装しよう ▪ オブゞェクトの削陀は Destroy メ゜ッドを䜿いたす – Destroy(gameObject) ではなく Destroy(this) ずするずどうなるでしょうか – 理由も考えおみおください
  17. 他にも ▪ プロゞェクト内にはただ説明しきれおいない芁玠も盛り蟌んでありたす – シェヌダヌ – ゚フェクト – ゚ディタ拡匵ビルドのメニュヌ ▪

    いろいろ芳察したりいじったりしおみおください ▪ 今回は基瀎的な内容にフォヌカスしたしたが、それぞれの芁玠ごずにもう少し発展的 な講習を実斜するかも知れたせん ▪ Unity Engine Challenge ずいうむベントもやっおいたす
  18. おわりに ▪ 本日の研修で扱った内容はただただごく䞀郚です – サりンド、アニメヌション、AssetBundle、  ▪ Unityマニュアルや曞籍などを掻甚するこずで曎に様々な機胜を知るこずができたす – https://docs.unity3d.com/ja/current/Manual/UnityManual.html ▪

    瀟内にも倚くのUnity゚ンゞニアがおり、瀟内倖に情報を発信しおいたす – たずはdocbaseを眺めおみるず良いでしょう ▪ ぜひゲヌムを䜜ったり、たたゲヌム以倖でも映像やコンテンツ生成など、様々に掻甚 しおみおください
  19. 研修埌の Photon AppID に぀いお ▪ 新卒の皆さんに配垃した AppID は研修担圓偎のPhotonアカりント䞊で䜜成したものに なりたす ▪

    研修終了埌はすみやかに削陀するので、匕き続きPhotonを䜿甚したい堎合はご自身で Photonアカりントを䜜成しおください
  20. Staff Credits Developer Relations Koji Kita Engineers Yuuki Shinobu Yuta

    Okamoto Akira Tanabe Hiroto Imoto Mizuki Shinozaki Tomotaka Sasaki Makoto Homma And you...