FC2ブログ
07 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 09

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】Photon(PUN2)得意な方教えてください!Photonでプレイヤーがアイテムとかとった時の処理について 

こんにちは。坂内っす。

本日はPhotonのお話。

Photonを使っている人ならわかるかもしれない。
PhotonNetwork.Instantiateで作成したものは、それを作ったオーナーしかPhotonNetwork.Destroyができない。

これPhotonの常識。

ここまではいい。

AさんBさんの二人でPhotonを使って対戦している時に、アイテムXが出るとしよう。

AさんがアイテムXをとった時には以下のようにしています。

[ItemBase.cs] アイテムが自分のキャラに触れたときの処理

private void OnCollisionEnter(Collision col) {
if (col.gameObject.tag == "Player") {
// 触ったプレイヤーを取得
Player player = col.gameObject.GetComponent<PlayerController>();
if (player.photonView.IsMine) {
photonView.TransferOwnership(player.photonView.OwnerActorNr);
// アイテムの獲得
player.GetItem(アイテムX);
PhotonNetwork.Destroy(gameObject);
}
}
}



TransferOwnerShipをすることで、アイテム自体のオーナーを取得したユーザに変更し、最後にアイテムのオブジェクトを消しています。

ここで問題があります。

①この方法でいいのか?
②A、Bの二人が同時にアイテムに触れた場合にエラーがでる。


まず①ですが、こんな感じでやってますが、この方法で消す処理はいいのか?
もっといい方法があるのか?
あるなら教えてフォトンマスター!


②二人同時でアイテムに触れると、2ユーザからDestroyが呼ばれて落ちる。

消すために、オーナーシップを触ったユーザに移し、Destroyをしているため、複数人同時に触ると誰かがエラーになってしまうんです。
厳密にはこんなエラーがでてるので、「AさんがDestroyしてるけど、PhotonViewがもうないよ」って意味ですよね。


Ev Destroy Failed. Could not find PhotonView with instantiationId 15. Sent by actorNr: 1


これの解決法っていいのありますか?

実は、触ったユーザにオーナー権を渡すのではなく、RPCで消す処理を投げて、MasterClientが消すとかの方がいいのかな?

この辺良く分かってないんですよね。

ってことで、素敵な解決法お待ちしています!

Photonなら任せろ!って方教えて!

ってことで、色々試してみます!あでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/625-4f317df5
この記事にトラックバックする(FC2ブログユーザー)