#根本的にやりたいこと
タイトルの通り、他のプレイヤーによってBoltNetwork
で生成されたゲームオブジェクト(BoltEntity
コンポーネント所持)をBoltNetwork
のDestroyで破壊したい。
#####状況
プレイヤーA(サーバー)とプレイヤーB(クライアント)が同じルームに入っていて、
ワールド内には破壊可能なオブジェクトがいくつもあります。
ワールド内のオブジェクトはすべてプレイヤーAによって生成されます。
プレイヤーAもBもオブジェクトを設置することが可能です。
プレイヤーAが生成したものをプレイヤーAが破壊するのは問題なく実行されます。
また、プレイヤーBが生成したものはプレイヤーBが破壊できます。
しかし、プレイヤーA(プレイヤーB)が生成したオブジェクトをプレイヤーB(プレイヤーA)が破壊するとエラーが発生し、正しく実行されません。
#####コード
引数に渡されたゲームオブジェクトをDestroyするというシンプルなものです。
C#
1//ここに渡されるobjはBoltEntityを所持していることを確認しています。 2public void DestroyObject(GameObject obj) 3{ 4 BoltNetwork.Destroy(obj); 5}
#調べたこと
Entity Ownership | Photon Bolt
Photon Boltの公式ページを読んでみたところ、「オーナー権限を他のプレイヤーに譲与することはできません。」と書いてあります。これがこの質問の回答(つまり「この質問は解決不可能だ」)になっているような気もしますが...
#自分の考え(解決のための策の一つ)
僕としては所有権を譲与し合って破壊出来たら楽だな(従来のPhoton Engineだとこれができていた)と思っていたのですが...
それができないのでゲームオブジェクトをリストに入れて、プレイヤーが破壊するオブジェクトのリスト番号を全プレイヤーに送信して、リスト内の同じ番号のオブジェクトを破壊させるやり方を考えたのですが、
そもそもListの同じ番号に同じゲームオブジェクトを入れるのは現実的ではないし、
せっかくBoltEntity
が存在するのでそれをうまく活用したいなと考えています。
指定したオブジェクトを破壊するよう、所有権を所持してるプレイヤーにリクエストすることは可能なのでしょうか。
#発生するエラー
BoltNetwork.Destroy()
を呼び出すタイミングで発生します。
Only the owner can destroy an entity, ignoring call to Destroy().
UnityEngine.DebugLogHandler:Internal_Log(LogType, LogOption, String, Object)
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object)
UnityEngine.Debug:LogWarning(Object)
UnityWriter:BoltLog.IWriter.Warn(String)
BoltLog:Warn(String)
BoltInternal.BoltCore:Destroy(BoltEntity, IProtocolToken)
BoltNetwork:Destroy(GameObject, IProtocolToken)
BoltNetwork:Destroy(GameObject)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。