杀死的僵尸数量没有增加/计数,是什么原因?

问题描述 投票:0回答:1

我正在统一制作一个游戏,我试图在僵尸被摧毁后增加杀死的僵尸,但它不起作用。这是在控制台上写的:

1
UnityEngine.Debug:Log (object)
zombieScript:TakeDamage (int) (at Assets/zombieScript.cs:49)
zombieScript:OnTriggerEnter2D (UnityEngine.Collider2D) (at Assets/zombieScript.cs:31)

我的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class zombieScript : MonoBehaviour
{
    public float snelheid; // velocity
    Transform speler; // player
    public int leven; // health
    public playerScript playerScript;
    public int killedZombies;

    // Start is called before the first frame update
    void Start()
    {
        speler = FindObjectOfType<playerScript>().transform;
    }

    // Update is called once per frame
    void Update()
    {
        transform.position = Vector2.MoveTowards(transform.position, speler.position, snelheid * Time.deltaTime );

    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if(other.tag == "bullet")
        {
            TakeDamage(other.GetComponent<bulletScript>().damage);
        }

        if(other.tag == "Player")
        {

            SceneManager.LoadScene(2);
            
        }
    }

    void TakeDamage(int damageAmount)
    {
        leven -= damageAmount;
        if(leven <= 0) // if (health <= 0)
        {
            Destroy(gameObject);
            killedZombies++;
            Debug.Log(killedZombies);

            if(killedZombies == 10)
            {
                SceneManager.LoadScene(2);
            }

            
        }
    }

}

我问了chatgpt,但它告诉我代码没有问题。

c# unity-game-engine testing 2d
1个回答
0
投票

每次僵尸被击中时,您都会在同一僵尸的脚本中增加killedzombie 变量,然后销毁它。您基本上是将 1 加 0,然后删除脚本。

如评论中所建议,有两个简单的解决方案。

  1. 在僵尸脚本中,有一个公共对象并将其连接到您的播放器。现在在播放器脚本中创建一个

    KilledZombiesCounter
    变量。每当僵尸被击中时,它就会访问玩家脚本中的
    KilledZombiesCounter
    并为其加 1。然后消灭僵尸。简单又干净。

  2. 创建一个“全局”变量。现在,执行与其他解决方案完全相同的操作,只不过您只需增加全局变量即可,而不是访问玩家的脚本。有关全局变量的更多信息,请参阅此处如何在 c# 中使用全局变量

希望我有帮助,干杯;)

© www.soinside.com 2019 - 2024. All rights reserved.