LoginSignup
1
0

More than 3 years have passed since last update.

photonnetwork.instantiateを使用せずデータの同期をする方法#ゲーム制作03

Posted at

どうも、わたたかです。
半ベソをかきながらもTwitterでアドバイスを頂き前回の問題を解決したので
その方法について書いていきます。

前回
前回の補足

上リンクを見て頂けると分かる通り自身が作成したCardControllerでは
photonnetwork.instantiateを使用することが出来ずどうにか他の方法は無いかと模索していました。

そこでRPCと言うものを使って生成と同期の処理を行うことにしました。

参考リンク
https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono3

訂正箇所

前回

CardController.cs
    public void Init(int cardID)
    {
        model = new CardModel(cardID);// 生成
        view.Show(model);// 反映
    }

訂正後

CardController.cs
using Photon.Pun

    [PunRPC]
    public void Init(int cardID)
    {
        model = new CardModel(cardID);// 生成
        view.Show(model);// 反映
    }

    [PunRPC]
    public void OnlineInit(int cardID)
    {
        photonView.RPC(nameof(Init), RpcTarget.All,cardID);
    }

こうすることによってphotonnetwork.instantiateを使用しなくてもオブジェクトを生成することが出来ました。空のオブジェクトにPhoronView.csをつけるのを忘れないように。

あとは追加で

GameManager.cs
    // ルーム入室時に呼ばれる関数
    public override void OnJoinedRoom()
    {
        Debug.Log("ルームへ入室しました!");
        StartGame();
    }

ルームに入室してからゲームを始める処理を開始することでよく分からないサーバーエラーから逃れることが出来ました。

まとめとこれから

無事カードを生成することが出来ましたがそれも束の間。
次はIllegal view ID:0 method: Init GO:PlayerCard (PlayerCardは空のカードPrefabの名前)
と言ったエラーが出て今度は頭を捻らせてます。
一難去ってまた一難はこういうことなんですね。

オブジェクトにPhoton viewID?と言うのが付いていないから出ているエラーっぽいですが
スクリプトのPhotonView.csを外すと生成すらされなくなるので外せないです。

解決策が分かる方がいましたらコメント、Twtter(@wttk05)のDMお待ちしてます。

3月までに人に遊んでもらえる状態まで持っていきたいなぁ...(遠い目)
それではさようなら。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0