7.9K Views
April 15, 23
スライド概要
unity1week online共有会#11 にて使用した資料
Photon Fusion for Unityで Cinemachineを使いたいだけの人生だった 2023/4/10 unity1week online共有会 #11 by ニム式
自己紹介 ● ● ● ● 名前 ニム式 サイト http://nimushiki.com twitter https://twitter.com/ni26mu @[email protected] ● ● ● オンラインゲーム挑戦中 u1w8回目 猫3匹と同棲
UnityGamingService ● Unityのクラウドサービス ○ ○ ○ ○ ● マッチング Analytics 課金システム etc 別件で使用 ○ サーバサイドプログラムを実行
$1800日本円にして約24万円
原因 ● ● 10/15~2/10まで起動しっぱなしだった 使わないときはちゃんと停止しよう!
アジェンダ ● ● ● 投稿作品について Photon Fusionとは 前提知識 ○ ○ ● Photon FusionでCinemachineを使いたい ○ ○ ● Photon Fusion Cinemachine 実装の目標 適するパターン、適さないパターン まとめ
投稿作品について エクストリーム郵便配達 | フリーゲーム投稿サイト unityroom ● ● 2チームに分かれるオンラインマルチプレイ ターゲットをゴールまで運ぶ
アジェンダ ● ● ● 投稿作品について Photon Fusionとは 前提知識 ○ ○ ● Photon FusionでCinemachineを使いたい ○ ○ ● Photon Fusion Cinemachine 実装の目標 適するパターン、適さないパターン まとめ
Photon Fusionとは ● ゲーム向けネットワークエンジン ○ ○ ○ ● 様々な新機能 ○ ○ ○ ● 状態転送ネットコードSDK PUN2の後継 展開中のPhotonシリーズの一部 ラグ対策 帯域節約 複数の接続方法 詳しくは公式サイト Fusionイントロダクション | Photon Engine
アジェンダ ● ● ● 投稿作品について Photon Fusionとは 前提知識 ○ ○ ● Photon FusionでCinemachineを使いたい ○ ○ ● Photon Fusion Cinemachine 実装の目標 適するパターン、適さないパターン まとめ
前提知識~Photon Fusion ● マルチピアモード ○ ○ Unityエディタ1つでビルドせずマルチプレイを実行、テスト マルチシーンを利用
前提知識~Chinemachine ● ● Unity公式の高機能カメラ 主なコンポーネント ○ ○ ● camera Cinemachine Brain Cinemachine virtualCamera ポイント ○ ○ Brain Camera:Brainは1:1 VirtualCameraは最適なものが自動選択 VirtualCamera イベント用 VirtualCamera 戦闘用
アジェンダ ● ● ● 投稿作品について Photon Fusionとは 前提知識 ○ ○ ● Photon FusionでCinemachineを使いたい ○ ○ ● Photon Fusion Cinemachine 実装の目標 適するパターン、適さないパターン まとめ
実装の目標 ● ● TPSゲームでよくある肩越しマウスエイムカメラ 体の向き+砲塔の向き(≒カメラ)を同期する(ここ伏線) プレイヤーオブジェに以下をつける Camera,Cinemachine,AudioListener
Photon FusionでCinemachineを使いたい ● ● ● まずはローカルでベーシックな実装 それをオンライン化 Unity公式動画を参考に実装 自由に走り回れる三人称視点のキャラクターを作る方法 - Cinemachine TIPS #1
Photon FusionでCinemachineを使いたい 結果 ● 全てのvirtualCameraがマウスに反応 ○ ● 全てのプレイヤーのカメラが同じ動きに … virtualCameraはプレイヤーの判別ができない Player1の マウス入力 Player1 Player2 camera camera Brain Brain VirtualCamera VirtualCamera
Photon FusionでCinemachineを使いたい 1敗 ● ● スクリプトからコントロール NetworkInputを経由 ○ Photon Fusionの標準的な入力の同期方法 入力 virtual camera 改善前 改善後 入力 Network Input Photon Cloud Network Input virtual camera
Photon FusionでCinemachineを使いたい 結果 ● ● ビルドすれば意図した動作 マルチピアでは妙な動作に ○ 原因は別の所だったかも … 正常 異常
Photon FusionでCinemachineを使いたい 2敗 ● ● virtualCameraのコントロールは諦める 砲塔を回転させ、virtualCameraを追従させる 入力 入力 砲塔 virtual camera 砲塔が追従 改善前 砲塔を回転 virtual cameraが 追従 改善後
Photon FusionでCinemachineを使いたい 結果 ● ● 期待した動きに しかし矢印キーだと2次元のエイムが難しい
Photon FusionでCinemachineを使いたい 3敗 ● 操作の仕様を変更 ○ ○ ● マウスの2次元操作から 矢印キーの1次元操作へ Unity公式を参考に実装 肩越しカメラを実現する方法 - Cinemachine TIPS #2
Photon FusionでCinemachineを使いたい 結果 ● ● 操作性はクリア 画面がビカビカする ○ 優先するvirtualCameraが定まらない どっちのVirtualCameraを 使うんだ…? Player1 Player2 camera camera Brain Brain VirtualCamera VirtualCamera
Photon FusionでCinemachineを使いたい 4敗 ● ● Cinemachineで複数Cameraを使うための設定 カメラの数だけレイヤーを分けてCulling Maskをかける 複数の Unity カメラ | Cinemachine | 2.6.0 Mask1 Layer1 Player1 Player2 camera camera Brain Brain VirtualCamera VirtualCamera Mask2 Layer2
Photon FusionでCinemachineを使いたい 結果 ● ● 正常に表示 課題 同時接続者数分のレイヤーが必要 標準では25程度しかレイヤーがない ○ ○ ● 参考 【Unity】レイヤーを実質無限に使えるようにするライブラリの紹介【Layer2】 - Qiita
唐突な アンケート Q.全てのUnity使いが100万回以上出し たことのあるエラーログといえば? A.
Photon FusionでCinemachineを使いたい 5敗 ● ● 各プレイヤー・各ピアに対しカメラ(とAudioListener)がある Runner Visibility Nodesを利用 ○ 自動で1つのピア(シーン)だけ有効にする Multi-Peer Mode | Photon Engine Unity Editor ピア1 ピア2 Player1 Player2 Player1 Player2 camera camera camera camera
Photon FusionでCinemachineを使いたい 結果 ● ● 一部成功 まだ重複あり アクティブにしたピア(シーン)だけ有効 = アクティブなピア内のものは全て有効 Unity Editor ピア1 ピア2 Player1 Player2 Player1 Player2 camera camera camera camera
Photon FusionでCinemachineを使いたい 6敗 ● ● ピア内に複数ある場合は自力で無効化 自作スクリプトで処理 ここは自力 Unity Editor ピア1 ピア2 Player1 Player2 Player1 Player2 camera camera camera camera
Photon FusionでCinemachineを使いたい 結果 ● 重複「は」しなくなった…
Photon FusionでCinemachineを使いたい 1分 ● 入力~同期までの遅延が無視できない ○ ● ローカルと同等の追従は無理かもしれない 以下の仕様のため ○ ○ プレイヤーの移動は入力即反映 カメラの移動はホストの反映を待つ
Photon FusionでCinemachine 適さないパターン ● 以下の要件が合わさると難しそう ○ ○ ○ ○ 車体の向き+砲塔の向き 2軸 砲塔にカメラが同期する 高速で移動する マルチピアに対応する
Photon FusionでCinemachine 適するパターン ● ● 一般的なゲームであれば問題なさそう 例えば ○ ○ ● カメラの位置を同期しないもの 動きがゆっくりしているもの 試してない組み合わせは多い ○ ○ ○ マルチピアを使わない virtualCameraのbody,aim、入力コントロール 各カメラオブジェクトの配置
まとめ(今後実装したい人向け) ● カメラ系コンポーネントは全プレイヤー分用意する ○ ● ● ● NetworkInputを介してコントロールする LayerとCulingMaskで複数Cinemachineに対応 Runner Visibility Nodesを利用する ○ ● Camera,Brain,VirtualCamera 他プレイヤーのカメラ類は自力で非アクティブに shared modeなら遅延を無視できる ○ カメラの同期を待つ必要がないため
おまけ(今後実装したい人向け) 他にもあったアレコレ ● ● Cinemachineの複数プレイヤー利用は想定外かも cameraの設置について ○ ● ● 移動の基準をカメラの向きにする工夫 砲塔の回転にFixedUpdateNetworkが使えない ○ ● 各プレイヤーの prefabに含める?全体で1つでいい? アニメーションには Renderを使う Networked intに0を代入するとコールバックが起きない問題 ○ ○ 負の値にはならないので +1して対処 Networkedは値を同期させるためのアトリビュート
Photon Fusionとは 参考記事 Photon Fusion for Unityの導入手順とPUN2との機能比較 https://qiita.com/nimushiki/items/d6fe4f0cbe0437677fa8 Photon Fusion for Unityの新機能 描画補間、ラグ補償、同期範囲設定 https://qiita.com/nimushiki/items/c82763817a8c7c4f2278 その他 https://qiita.com/tags/photonfusion
ご清聴 ありがとうございました!