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.jp/tb.php/625-4f317df5
    この記事にトラックバックする(FC2ブログユーザー)