LoginSignup
14
15

More than 5 years have passed since last update.

【Unity】Unite 2015「協力・対戦ゲームを支えるPhotonの最新情報、Mecanimにネイティブ対応したPUNの実力協力・対戦ゲームの市場感」レポート

Last updated at Posted at 2015-04-23

レポート一覧

講演ファイル

アジェンダ

  • マルチプレイのゲームを作るには
  • Photonのご紹介
  • PUNのご紹介
  • PUN1.5xを使ったMecanim同期デモ
  • Photon最新情報

マルチプレイについて

協力・対戦ゲームの市場感

  • マルチプレイゲームの数
  • 単純にマルチプレイかどうかの判断で見ると両プラットフォームで増加傾向
  • 直近では半数以上になっている

協力・対決の割合

  • どちらのプラットフォームも協力プレイだけのゲームというのは少ない
  • 日本においても対戦ゲームは増えてきてる

まとめ

  • 市場は盛り上がっている
  • 協力はもちろん、対戦も増えている
  • マルチプレイという要素はスタンダードに

マルチプレイのゲームを作るには

マルチプレイって?

  • 複数のプレイヤーが同時に同じゲームを楽しむこと
  • プレイヤー同士をつないでデータのやり取りが必要

同期すべきデータ

  • 各キャラクタの位置、状態
  • イベント情報
  • ゲーム全体の状態
  • etc.

キャラクタの位置・状態

  • 全プレイヤー内のキャラクタの位置や状態は同期していないとダメ
  • Unity的な言い方をすれば各インスタンスのtransform,animatorのステータスを同期させる
  • イベント情報
  • ゲームの重要な要素
  • よくあるのは衝突判定の結果とか
  • イベントをだれが発生させるのかとか
  • ゲーム全体の状態
  • 同じゲームをしている人すべてが共有すべき情報
    • たとえば、ゲームの進行状態とか、残り時間とか
    • レイドバトルのような場合は敵キャラの状態とかもここで管理する方法も

どこで処理を実装するか

  • 日本のディベロッパーは、ソーシャルゲームの癖でついサーバー側でと考えがちですが
    なるべくクライアント側で実装を勧めます
  • サーバー側で何でもやると、通信のタイムラグやサーバーの負荷を気にしたりとか、
    結構大変だったりします

マルチプレイゲームのまとめ

  • 肝はデータの同期
  • 同期させる対象、事象を整理しておく
  • ゲームを始めるまでのロビーやマッチメイキングのお話もありますが、別の機会に

Photonのご紹介

Photonとは

  • マルチプレイを実現するために必要な機能を一通り持っているツール
  • サーバーとクライアントSDKをセットで提供
  • クライアント間の通信を簡単に実現するためのシステム
  • サーバーは安全性?を確保するためのもので、基本的に処理を行うのはクライアント

Photonでできること

  • リアルタイム通信
  • ストレージとかリーダーボードとかそういう機能は持っていません
  • 主な機能
    • ロビー
      • 名前付きロビー
      • マッチメイキング
      • プレイヤー検索
    • ルーム
      • 人数制御・表示制御
    • カスタムプロパティ
    • 同期関連
      • オブジェクト同期
      • イベント通知
    • RPC(PUN)
      • WebHooks/WebRPC
      • オフラインモード

特徴

  • サーバー経由の接続なので接続性が高い
  • 独自技術による信頼性と低レイテンシーの両方を確保
  • クロスプラットフォーム対応で異なるプラットフォーム間でも利用可能
  • UnityからはAssetStoreからダウンロードするだけでSDKの利用が可能

PUNのご紹介

  • PhotonのNative SDK
  • クロスプラットフォームでどのプラットフォームでも基本的には同じ形のAPI
  • Photonのすべての機能を使えます
  • Photon Unity Networkingの略
  • Native SDKをベースにPhotonをUnityで使いやすい形にしたAPI
  • Unity Networking互換で移行も容易
  • サーバーはRealtimeと全く同等
  • Asset Storeからインポートするだけで利用可能

PUNならではの特徴

  • 簡単なクラス構造
    • SDKのクラスを派生させて、そこに必要なコードを追加して、
      メインクラスから呼び出す、という構造
  • 簡単オブジェクト同期
    • Native SDKではオブジェクト同期もイベント発生・受信で処理するので
      簡単ながらコードが必要
    • PUNではインスタンスにクラスをアタッチするだけで
      Transform/Rigidbodyを同期させることが可能
    • 同期のタイミングはPUNが面倒を見るので勝手にやってくれます
    • RPCによる簡単なイベント通知
      • RPCなら[RPC]属性を付けたメソッドを作成して、
        そのオブジェクトに対してRPCメソッドでメソッド名を名前で指定するだけ

PUNで簡単にオンラインゲーム

  • キャラクタの位置・状態:オブジェクト同期
  • イベント情報:イベント通知、RPC
  • ゲーム全体の状態:ルームのカスタムプロパティ

PUN1.5xを使ったMecanim同期

  • Mecanimにもネイティブ対応
  • 接続処理部分以外はほとんどコーディングなしでできています
    • 実際に10分程度のコーディングで動作するデモを見せていただきました

まとめ

  • 接続処理はさすがにコーディングが必要ですが、
    スクリプトがほとんどなくても同期できる
14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15