当Player
向Zombie
Raycast
发射Zombie(clone)
时,它应该会损坏Player
直到它被摧毁。但是,Zombie
造成的损失会对变量currentHealth
上的一般currentHealth
类造成损害,而不会损害每个Zombie GameObject
上的currentHealth
。此外,即使游戏从开始重新开始,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();
}
}
-
{{1}}
答案 0 :(得分: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);
}