・背景
UnityとPhotonでオンラインアクションゲームを作成しております。
ロビーに2人があつまると、数秒後にそれぞれのスタート地点に飛ばし、ゲームを開始します。
・躓いているところ
スタート地点に飛ばしたあと、プレイヤーの位置の同期がまれにおかしくなります。
発生率は100%ではありません。
ロビー時点では両者ともに正常に同期できていることが確認できております。
リスポーンの処理を何度か行っても問題は解消されず、その場合はアプリを落とす必要があります。
何卒お力をお貸しください。
よろしくお願い致します。
・備考 ※2022年2月24日追記
①本ゲームの実装の初期段階では同期ずれがあまり起きていなかった認識なので、何かの実装タイミングでずれが発生した可能性があります。
②transform.positionでプレイヤー移動時に、引っかかっている様子があります。transform.position以外の方法でプレイヤーを移動するか、衝突判定を一時的にいじれば解消しそうな気がします。(やり方が不明なので検討中)
③移動先を変えてみましたが、同じように同期ズレが発生しました。
④同期対象が多すぎるのが問題かと考え、同期対象を減らしましたが、問題は解決しませんでした。
・スクリーンショット
ロビー集合時の画面 ※2人の位置は正常に同期されている
プレイヤーAの視点 ※転送後。正常に同期がとれているように見える
プレイヤーBの視点 ※転送後。プレイヤーAが床に浮いており、同期処理が働いているのか、上に戻ろうと上下にキャラがぶれている
・ソースコード 各プレイヤーの転送部分 ※2022年2月24日追記
C#
1 //二人そろうとstart_fragが1になり、各スタートポジションへの転送が始まる 2 if (start_frag == 1) 3 { 4 Debug.Log("start_frag 1"); 5 6 if (team == "red") 7 { 8 Vector3 tmp = GameObject.Find("Start_point_red").transform.position; 9 GameObject.Find("Player[" + photonView.OwnerActorNr + "]").transform.position = new Vector3(tmp.x, tmp.y, tmp.z); 10 } 11 12 if (team == "blue") 13 { 14 Vector3 tmp = GameObject.Find("Start_point_blue").transform.position; 15 GameObject.Find("Player[" + photonView.OwnerActorNr + "]").transform.position = new Vector3(tmp.x, tmp.y, tmp.z); 16 } 17 //start_fragを2にして再転送を避ける 18 start_frag = 2; 19 Debug.Log("start_frag 2"); 20 21 }
回答1件
あなたの回答
tips
プレビュー