2017-07-16 24 views
0

Player拍摄ZombieRaycast它应该会损坏Zombie(clone),直到它被销毁。但是,Player的损坏会损坏变量currentHealth上的一般Zombie级别,而不是每个Zombie GameObject上的currentHealth。此外,即使在游戏从开始重新启动后,currentHealth值也会保持不变。统一;变量影响一般Class,而不是特定的GameObject,附加Class,gameObject变量永久存储值

console debug errors

public class Zombie : MonoBehaviour 
{ 
    public int currentHealth = 2; 

    public void Damage(int damageAmount) 
    { 
     //subtract damage amount when Damage function is called 
     currentHealth -= damageAmount; 

     //Check if health has fallen below zero 
     if (currentHealth <= 0) 
     { 
      //if health has fallen below zero, deactivate it 
      gameObject.SetActive (false); 

      //Destroy(gameObject); 
     } 
     Debug.Log(name + currentHealth); 
    }  
} 

-

public class Player : MonoBehaviour 
    { 
     public RaycastHit hit; 
     public int gunDamage = 1; 
     public Zombie zombie; 
     public Camera fpsCamera; 
     public int weaponRange = 50; 
     private int layerMask = 1 << 9; 

     void Start() 
     { 
      spawnPoints = playerSpawnPoint.GetComponentsInChildren<Transform>(); 
      // bullet = GetComponent<GameObject>(); 
     } 

     void LazerBeam() 
     { 
      Vector3 rayOrigin = fpsCamera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0f)); 
      Debug.DrawRay(rayOrigin, Vector3.forward * weaponRange, Color.green); 

      if (Physics.Raycast(rayOrigin, fpsCamera.transform.forward, out hit, weaponRange, layerMask)) 
      { 
       zombie.Damage(gunDamage); //kills zombie 
       Debug.Log(name + " " + zombie); 
      } 
      Debug.Log(hit.collider); 
     } 

     void Update() 
     { 
      if (Input.GetKeyDown(KeyCode.Z)) 
      { 
       LazerBeam(); 
      } 
     } 

回答

2

您目前正在应用到连接到播放器,而不是一个连接到被打的对象Zombie损坏。你可以从RaycastHit hit得到一个参考。

if (Physics.Raycast(rayOrigin, fpsCamera.transform.forward, out hit, weaponRange, layerMask)) 
{ 
    Zombie zombieHit = hit.transform.gameObject.GetComponent<Zombie>(); 
    zombieHit.Damage(gunDamage); //kills zombie 
    Debug.Log(name + " " + zombieHit); 
}