我正在统一制作一个游戏,我试图在僵尸被摧毁后增加杀死的僵尸,但它不起作用。这是在控制台上写的:
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,但它告诉我代码没有问题。
每次僵尸被击中时,您都会在同一僵尸的脚本中增加killedzombie 变量,然后销毁它。您基本上是将 1 加 0,然后删除脚本。
如评论中所建议,有两个简单的解决方案。
在僵尸脚本中,有一个公共对象并将其连接到您的播放器。现在在播放器脚本中创建一个
KilledZombiesCounter
变量。每当僵尸被击中时,它就会访问玩家脚本中的 KilledZombiesCounter
并为其加 1。然后消灭僵尸。简单又干净。
创建一个“全局”变量。现在,执行与其他解决方案完全相同的操作,只不过您只需增加全局变量即可,而不是访问玩家的脚本。有关全局变量的更多信息,请参阅此处如何在 c# 中使用全局变量
希望我有帮助,干杯;)