我是相當新的團結網絡和網絡本身。Unity網絡 - [命令]功能執行時,它不應該
遊戲: 我有2個玩家多人遊戲,每個玩家可以射擊。
問題:
代碼1使得雙方球員拍攝(在主機遊戲只)當東道主選手按空格鍵。客戶玩家不能從客戶的遊戲中投籃。
注意:if (Input.GetKeyDown (KeyCode.Space))
位於CmdShoot方法內部。
代碼2正確執行。主持人可以在主機遊戲中進行拍攝,客戶可以從客戶的遊戲中進行拍攝。
注:if (Input.GetKeyDown (KeyCode.Space))
是CmdShoot方法之外代碼2.
問題: 在碼1,爲什麼不能拍客戶端和爲什麼主機使得雙方球員拍攝?
代碼1:
// Update is called once per frame
void Update() {
if (!isLocalPlayer) {
return;
}
CmdShoot();
}
[Command]
void CmdShoot(){
if (Input.GetKeyDown (KeyCode.Space)) {
GameObject force_copy = GameObject.Instantiate (force) as GameObject;
force_copy.transform.position = gameObject.transform.position + gameObject.transform.forward;
force_copy.GetComponent<Rigidbody>().velocity = gameObject.transform.forward * force.GetComponent<Force>().getSpeed();
NetworkServer.Spawn (force_copy);
Destroy (force_copy, 5);
}
}
代碼2:
// Update is called once per frame
void Update() {
if (!isLocalPlayer) {
return;
}
if (Input.GetKeyDown (KeyCode.Space)) {
CmdShoot();
}
}
[Command]
void CmdShoot(){
GameObject force_copy = GameObject.Instantiate (force) as GameObject;
force_copy.transform.position = gameObject.transform.position + gameObject.transform.forward;
force_copy.GetComponent<Rigidbody>().velocity = gameObject.transform.forward * force.GetComponent<Force>().getSpeed();
NetworkServer.Spawn (force_copy);
Destroy (force_copy, 5);
}
這很有道理!但是,在代碼1中,如果主機按下空格鍵,主機和客戶端將會拍攝!客戶不會每次都拍攝。客戶大約每隔5-7個空格鍵就拍攝一次。 –
我相信網絡發送速率會抑制客戶端上CmdShoot()的發送速率。對於主機,它每次調用Update()時都會檢查,但可能每隔25 ms調用一次客戶端的CmdShoot()(不記得網絡發送速率的默認值)。 – LapisLazuli
但是爲什麼客戶端播放器在主機按下空格鍵時會拍攝?我明確地告訴它不運行CmdShoot,如果它不是具有'if(!isLocalPlayer)'的本地播放器' –