2017-07-09 8 views
0

ではありません。こんにちは、私はマルチプレイヤーゲームのチャットをしようとしています。メッセージプレハブをすべてのクライアントとホスト上でインスタンス化しています。 。テキストは変わらず、デフォルトのままです。UNET - オブジェクトはネットワーク経由で同期されますが、テキストコンポーネントは

ChatManager.cs:

using System.Collections.Generic; 
using UnityEngine; 
using System.Collections; 
using UnityEngine.Networking; 

public class ChatManager : NetworkBehaviour 
{ 
    [SerializeField] private GameObject chat; 
    [SerializeField] private GameObject chatItemPrefab; 
    [HideInInspector] public List<ChatItem> messages; 

    public float messageExpireTime = 5; 

    public static ChatManager instance; 

    void Awake() 
    { 
     instance = this; 
    } 

    public void ChatSendMessage(string sender, string message) 
    { 
     CmdChatSendMessage(sender, message); 
    } 

    [Command] 
    void CmdChatSendMessage(string sender, string message) 
    { 
     GameObject chatItem = Instantiate(chatItemPrefab); 
     chatItem.transform.SetParent(chat.transform); 
     ChatItem messageSettings = chatItem.GetComponent<ChatItem>(); 
     messageSettings.Setup(sender, message); 
     messageSettings.chatNetId = chat.GetComponent<NetworkIdentity>().netId; 
     NetworkServer.Spawn(chatItem); 
     StartCoroutine(WaitForExpire(chatItem)); 
    } 

    public IEnumerator WaitForExpire(GameObject chatItem) 
    { 
     yield return new WaitForSeconds(messageExpireTime); 
     CmdDestroyChatMessage(chatItem); 
    } 

    [Command] 
    void CmdDestroyChatMessage(GameObject chatItem) 
    { 
     NetworkServer.Destroy(chatItem); 
    } 
} 

ChatItem.cs:

using UnityEngine.UI; 
using UnityEngine; 
using UnityEngine.Networking; 

public class ChatItem : NetworkBehaviour 
{ 
    [SerializeField] private Text senderText; 
    [SerializeField] private Text messageText; 
    [SyncVar] public NetworkInstanceId chatNetId; 

    [SyncVar] public string sender; 
    [SyncVar] public string message; 

    void Start() 
    { 
     GameObject chatParent = ClientScene.FindLocalObject(chatNetId); 
     transform.SetParent(chatParent.transform); 
    } 

    public void Setup(string sender, string message) 
    { 
     senderText.text = string.Format("[{0}]:", sender); 
     messageText.text = message; 
     this.sender = sender; 
     this.message = message; 
    } 
} 

"ChatSendMessageが" paremeters "サーバー" と呼ばれ、 "こんにちは!" 場合はここで私が持っているコードです。

Host

をしかし、クライアントが見ている:

ホストが見る:ホスト上の

デフォルトのテキストである

Client

..

問題は何ですか私は対処している。何か案は?ありがとう

答えて

0

固定 - 私はあなたが送信している人の場合は、セットアップメソッドで上書きされますが、セットアップが実行されないリモートクライアントの場合は、送信側のクライアントの設定メソッドからすでに設定されているsyncvarからテキストを設定するだけです。例えば

void Start() 
{ 
    GameObject chatParent = ClientScene.FindLocalObject(chatNetId); 
    transform.SetParent(chatParent.transform); 
    senderText.text = string.Format("[{0}]:", sender); 
    messageText.text = message; 
} 
関連する問題