0
我試圖解決這個問題,現在幾個星期沒有成功,真的需要幫助。UNET - 同步。非玩家對象上的顏色腳本
當我啓動實際播放器對象上的顏色同步時,我可以在非播放器對象上同步顏色。
但是,我遇到的問題是我想將腳本附加到管理顏色同步的非播放器對象。我有相同的位置和旋轉同步工作。
當我拖動非玩家對象時,我將它變成紅色,當我拖動拖動時,我將它重新變成白色。但是,當在遠程客戶端上拖動時,我遇到了授權方面的問題,這就是爲什麼我認爲我無法解決問題。
這裏是序列:
- 導通的dragstart一個)AssignNetworkAuthority b)中改變顏色以紅色
- 將
- On_DragEnd一個)重畫,以白色b)中ReleaseNetworkAuthority
當我從遠程客戶端執行此操作時出現權限錯誤。我的結論可能是錯誤的,因爲出於某種原因,分配 - 移除權限聲明與繪畫不同步。
這裏是我使用的代碼(childGameObject較早分配):
public void On_DragStart (Gesture gesture) {
if (!isLocalPlayer)
return;
// Assign Network Authority
myNetID = childGameObject.GetComponent<NetworkIdentity>();
// >>>> HERE I ASSIGN AUTHORITY
Cmd_AssignNetworkAuthority (myNetID.netId, childGameObject);
// >>>> HERE I CHANGE THE COLOR TO RED
childGameObject.GetComponent<Renderer>().material.color = Color.red;
}
public void On_Drag(Gesture gesture) {
if (!hasAuthority)
return;
if (firstRun) {
firstRun = false;
}
myTransform.transform.position = Camera.main.ScreenToWorldPoint (new Vector3 (gesture.position.x, gesture.position.y, 1f));
}
public void On_DragEnd (Gesture gesture) {
if (!isLocalPlayer)
return;
// >>>> HERE I CHANGE THE COLOR BACK TO WHITE
// gesture.pickedObject.GetComponent<Renderer>().material.color = Color.white;
childGameObject.GetComponent<Renderer>().material.color = Color.white;
// >>>> HERE I RELEASE AUTHORITY
Cmd_ReleaseNetworkAuthority();
}
下面是附連到非參與者目標的實際sync.script:
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class Object_ColorSync : NetworkBehaviour {
[SyncVar] private Color syncColor;
public GameObject myGO;
void Start() {
syncColor = myGO.GetComponent<Renderer>().material.color;
}
void Update() {
DoColor();
}
void DoColor() {
Cmd_DoColor (myGO.GetComponent<Renderer>().material.color);
}
[Command]
void Cmd_DoColor(Color _myColor) {
syncColor = _myColor;
Rpc_DoColor (_myColor);
}
[ClientRpc]
void Rpc_DoColor(Color _syncColor) {
myGO.GetComponent<Renderer>().material.color = _syncColor;
}
}
同步。腳本是用於測試,所以當我關閉Cmd_DoColor時沒有真正優化過。在最後,我將添加一個if語句並檢查顏色是否已更改。