2016-05-26 16 views
0

ゲームで[SyncVar]属性が動作していません。SyncVarが機能しないUnity Networking

  1. 私は私が正しくsyncvar属性と、クライアントは、サーバー上の変数を更新することができますフック
  2. を追加
  3. コマンド機能を使用して変数を変更しましたが、サーバーではありません:私はことを確認して作られていますここでは、クライアント上で

を変数を更新することは、私のスクリプトは、次のとおりです。スクリプトを撮影

プレーヤー:

using UnityEngine; 

using System.Collections; 

using UnityEngine.Networking; 

public class PlayerShoot : NetworkBehaviour { 

public GameObject shootPosition; 

public float shootRange = 100; 
public float shootRate = 0.2f; 
float nextCheck; 

public int damage = 10; 

// Use this for initialization 
void Start() { 

} 

void DetectShooting(){ 
    if (Time.time > nextCheck && Input.GetMouseButton(0)) { 
     nextCheck = Time.time + shootRate; 
     CmdShoot(); 
    } 

} 

[Command] 
void CmdShoot(){ 
    RaycastHit hit; 
    Ray bulletDirection = new Ray (shootPosition.transform.position, transform.forward * shootRange); 
    Debug.DrawRay (shootPosition.transform.position, transform.forward * shootRange, Color.blue, 10.0f); 
    if (Physics.Raycast (bulletDirection, out hit, 100)) { 
     print (hit.transform.name); 

     if (hit.transform.CompareTag ("Player")) { 
      hit.transform.GetComponent<PlayerHealth>().DeductHealth (damage); 

     } 

    } 
} 

// Update is called once per frame 
void Update() { 
    print (isLocalPlayer); 
    if (isLocalPlayer) 
    DetectShooting(); 
} 
} 

プレーヤー健康スクリプト:

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityEngine.Networking; 

public class PlayerHealth : NetworkBehaviour { 


public static int maxHealth = 100; 

[SyncVar (hook ="UpdateUI")] 
public int currentHealth = maxHealth; 

public Slider healthBar; 

void UpdateUI(int hp){ 
    healthBar.value = currentHealth; 
} 

public void DeductHealth(int damage){ 
    if (isServer) 
    currentHealth -= damage; 

} 

// Use this for initialization 
void Start() { 
    //InvokeRepeating ("DeductHealth", 0, 2); 
    SetInitialReferences(); 
} 

void SetInitialReferences(){ 


} 

// Update is called once per frame 
void Update() { 

} 
} 

ここではいくつかのスクリーンショットです:

Client Screen Shot After shooting the host

Host Screen Shot After being shot

答えて

1

あなたが機能してSyncVarをフックしているので、あなたは合格する必要があります変数を手動で設定してください(hp < = 0)。

void UpdateUI(int hp){ 
    currentHealth = hp; 
    healthBar.value = currentHealth; 
} 
関連する問題