

UnityのPhotonを使って人狼型オンラインゲームを作ろうとしています。  
役職をそれぞれのPlayerに与えるまではよかったのですが、それをそれぞれのPlayerの画面に表示すると、役職が正しく表示されません。  
エラーは発生していません。

# コード

[code]

    public PhotonView photonView;
    public GameObject jobUI;
    
    if(!photonView.isMine) {
       jobUI.SetActive(false);
    } else {
       jobUI.SetActive(true);
    }
    
    public IEnumerator JobOnGUI(GameObject player)
    {
        jobUI.SetActive(true);
        yield return new WaitForSeconds(5f);
        Text jobText = jobUI.transform.Find("JobText").GetComponent<Text>();
        jobText.text = player.GetComponent<PlayerController>().GetJob().ToString();
    }
    
[/code]

初心者なのでかなり書式がぐちゃぐちゃです。

# 試したこと

PhotonViewのついたPlayerのプレハブの子要素に役職表示用のUIを入れて、Instantiateしています。  
photonViewにはPlayerについているものを入れて、jobUIには、Canvasの子要素にあるPanelを入れています。Panelの子要素にJobTextがあります。  
JobTextのtextには、PlayerController(プレーヤー制御用のスクリプト)の役職の列挙型をそのまま入れています。  
GameManagerのほうで役職の設定は行い(ここも正しく機能している)、このコルーチンを呼び出しています。

# 結果

それぞれのプレイヤーのjobTextには、正しい役職が入っているのですが、実際に表示されている役職が違います。


CC BY-SA 4.0
2022-01-02T13:01:25.653
85450
2022-01-23T12:22:44.090
50737
question
c# unity3d
UnityのPhotonで自分以外のPlayerのCanvasが混じらないようにしたい。


> PhotonViewのついたPlayerのプレハブの子要素に役職表示用のUIを入れて、Instantiateしています。

この Instantiate は **PhotonNetwork.Instantiate**
メソッドのことですよね？その場合、そのような処理では、その「役職表示用のUI」は全員の UI に表示されてしまいます。

もちろん Player のプレハブは全クライアントに対して生成したいでしょうが、UI は自分自身にだけ生成してやればよいと思います。

つまり、UI 部分だけ別のプレハブにして、Player が Instantiate される時に、 PhotonView.isMine == true
を満たす時だけ、UI のプレハブを Instantiate (
**[Object.Instantiate](https://docs.unity3d.com/ja/2018.4/ScriptReference/Object.Instantiate.html)**
) してやる、ということです。この時、UI のプレハブに PhotonView コンポーネントは必要ありません。


CC BY-SA 4.0
2022-01-23T12:22:44.090
85878
2022-01-23T12:22:44.090
48297
85450
answer