質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1098閲覧

プレイヤーによってInstantiateされたオブジェクトをDestroyしたい | Photon Bolt

Yukirr4_

総合スコア728

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/22 09:09

編集2020/07/29 09:14

#根本的にやりたいこと

タイトルの通り、他のプレイヤーによって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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

イベントを使用することでうまくいきました。

投稿2020/07/31 12:57

Yukirr4_

総合スコア728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問