我有一个游戏,每当你杀死一个僵尸,你得到一个点。它的工作原理,但由于某种原因,有时当我杀死一个僵尸的分数会下降一个随机的数量,即使我从来没有编码,使分数可以下降。这里是碰撞脚本,这是得分计算的地方。我愿意回答你们的任何问题。谢谢!点击这里的Game Footage
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CollisionScript : MonoBehaviour
{
private int killCount;
public Text scoreCount;
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("zombie"))
{
Destroy(other.gameObject);
killCount += 1;
scoreCount.text = "Kill Count: " + killCount.ToString();
}
}
}
我试着看看分数下降是否有任何特定的模式,但它似乎是完全随机的。
2条答案
按热度按时间bzzcjhmw1#
其他人已经指出了这个问题。你在每把剑上运行了两个
CollisionScript
的示例。根据物理刻度期间哪把剑与僵尸碰撞,会显示不同的内部击杀计数。这就是为什么分数有时会跳回几个值,然后突然跳回一个高值。您可以将
killCount
转换为静态,或者创建一个KillManager
来跟踪killCount
。这样你就不会看到分数下降,但你会注意到另一个错误。如果在同一个物理勾选两把剑接触同一个僵尸,你会得到两分。要解决这个问题,你有很多选择。
1.使用单盒碰撞器
在你的例子中,剑是以盒子的形式被拿着的。没有理由为每把剑安装两个独立的碰撞器。一个盒子就可以了,玩家也不会知道。一个盒子意味着一次碰撞和一个击杀计数器。显示器不与其他资源共享。
2.给你的Zombie添加一个被杀死的bool
你可以在你的僵尸正在运行的脚本中添加一个公共bool。当剑遇到亡灵的肉时,你可以快速检查bool,看看僵尸是否已经被其他东西杀死。如果不是,你可以增加分数并将僵尸标记为已杀死。
rkkpypqq2#
现在的代码不会减少计数器。正如@jdweng所评论的,你可能会看到这个调用的不同示例的输出。
我建议在调试时做一些临时性的修改,给予每个
CollisionScript
示例一个唯一的编号。注意,Unity调用构造的次数比您预期的要多,所以不必担心丢失数字。