统一;变量影响一般类,而不是具有附加类的特定gameObject,而gameObject变量永久存储值

时间:2017-07-16 21:21:20

标签: c# debugging inheritance unity3d gameobject

PlayerZombie 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); } } 值仍然存在。

console debug errors

 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}}

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);
}