あーいこんちはー
今回はプレイヤーを同期させていくよ
着いてきなさい!!!!
プレイヤーを同期って何?
Photonで同じルームに入ってる人同士は、ある決まったやり方でゲームオブジェクトをインスタンシエイトすれば、簡単に動きを同期できるんや。
その方法は「Photon Network Instantiate !!!!!!!!」
この方法を使うと、、、
・位置の同期
・アニメーションの同期
・リジッドボディの値の同期
ができるんだ。
これができれば、一緒の部屋でわいわい騒いだりすることができるというわけ。
もっと細かい同期(ダメージとかHPとかいう数値)を同期させたかったら次回やるRPCってやつを使うんだけど、今回は見た目だけの同期だからこれでやってくよ。
完成図はこんな感じ
そんじゃやっていこう
準備
すまん、前回と前々回の記事、手順までめちゃくちゃ丁寧に写真付きで解説したからきつかったんです。
なので、結果といいますか、完了物を晒して解説するだけに止めようかと・・・汗
申し訳ない笑
①Managerの準備


はい、1枚目をみてもらうとわかる通り、部屋に入れた時のノードのケツになんかひっついてるね。
2枚目でアップでうつしてるよ。
これが今回の肝、PhotonNetWorkInstantiateだね。
こいつは今、「Player」って名前のゲームオブジェクトをプロジェクトから検索してインスタンシエイトとしているぜ。
この関数でインスタすると、相手と色々同期できるオブジェクトが作れるわけだ。
回転してほしくないし座標(0.0)に出現して欲しいから、引数には全部0を入れてるぜ
あと、WaitForSecond使ってるからイベント関数にコルーチーンのチェックつけてね。バグるよ。
「Group」と「Data」ってやつは正直わからん。誰か教えて。
ってことで

あと、この画像右下に注目。
Managerに「PhotonView」っていうスクリプトひっついてるじゃん。
これ多分必要。
だから「コンポーネントを追加」から検索してアタッチしてくれ
②Canvasの準備

たぶんこっちの方がバグとか起きにくそうだなと思って、canvasのレンダーモードを「スクリーンスペースーカメラ」にしました。
カメラはもともとシーンにあったものをドラッグアンドドロップしてる。
③Wallの準備

プレイヤーがインスタされたあとにすぐ他プレイヤーがインスタすると吹っ飛ぶかな〜と思って壁作りました。
4方を囲ってるから4つwallあるね。
壁には2Dボックスコライダーがついてるよ。だからプレイヤーを弾くよ。
④Playerオブジェクトの準備

なにげ一番大変だった。ただの四角なのに。。。
プレイヤーを作るときにやったこと一気にまとめるよ。

・2Dオブジェクトのスクエアを新規作成
・2Dボックスコライダー、リジッドボディ2D、Boltフローマシン、PhotonView(IDで他のプレイヤーのオブジェクトと区別をつける役割)、PhotonTransformView(座標を同期する役割), PhotonRigidbody2DView(RigidBodyの値を同期する役割。速さとかね)コンポーネントをそれぞれアタッチ。
リジッドボディ2DのConstratsみたいなとこのz軸にチェック。これで回転しなくなる
・キャンバスを新規で作って、めっちゃちっちゃくしてプレイヤーの子オブジェクトにして、テキスト「Player」とスクロールバーを配置(これ要らない。雰囲気だけ。)
(ちなみにキャンバスはレンダーをワールドスペースに切り替えると小さくできるよ)
・フローマクロ「Player」をマシン内にD&D(後で中身見せます)
・プロジェクトファイルの「Resources」フォルダにプレファブにして保存(ここ結構重要)
結構やること多いね。
疲れたよ。
⑤フローマクロ「Player」の準備

でん。
猿でも書けそうなノードだね!(白目)
矢印キーボードで移動できるよ。使ってるのはAddForce関数。
その前にBranchでチェック入ってるじゃん?
そこは、「自分自身のオブジェクトだけ動かしたいから、これが自分のものかどうかチェック」してるんだよ。それをチェックできるのが「IsMine」ユニットです。
自分が生成したPhotonオブジェクトならTrueを返してくれるよ。
これをPlayerオブジェクトに貼り付けよう!
プレイヤーオブジェクトはゲーム開始時にPhotonインスタされるから、シーン内にあるPlayerオブジェクトは消してね。どれが生成されたオブジェクトかわかんなくなるから。
完成〜
ビルド、しようね!
ビルドした後、ファイルを複製すれば下みたいに小さいウィンドウ2つで試せるよ。
神ゲーが作れそうな予感!!!(実際これ作ったらソワソワして色々妄想が膨らむよ)
コメント