如何在OnTriggerEnter中增加一个数字



所以我每次碰壁都试图提高我的分数(IsTrigger(,但当我试图提高它时,它不起作用,仍然是100

这就是我在中遇到问题的代码

public Text scoreText;
public int score = 0;
void Start()
{
scoreText.text = score.ToString();
}
// Add Some Score To The Text When The Player Hit The CheckPoint
void OnTriggerEnter(Collider collider)
{
if (collider.name == "Player")
{
score += 100;
scoreText.text = score.ToString();
Debug.Log(score);
}
}
执行触发器/碰撞测试时,请确保添加一个条件检查之外的Debug.Log()。在您的情况下,
void OnTriggerEnter(Collider collider)
{
if (collider.name == "Player")
{
score += 100;
scoreText.text = score.ToString();
Debug.Log(score);
}
Debug.Log("Just want make sure it indeed triggered.");
}

在大多数情况下,除了代码的问题之外,Rigidbody组件很可能没有添加到GO中。

另一部分我不确定,因为我已经很长时间没有使用Unity了。如果需要,可以将UI文本更新代码移动到触发器之外。

您需要在更改值后更新文本,在您的情况下,您必须更新"scoreText";根据新的";得分;价值简单的方法是这样的:

public Text scoreText;
public int score = 0;
void Start()
{
scoreText.text = score.ToString();
}
// Add Some Score To The Text When The Player Hit The CheckPoint
void OnTriggerEnter(Collider collider)
{
if (collider.name == "Player")
{
score += 100;
scoreText.text = score.ToString();
Debug.Log(score);
}
}

最好有一个称为";ChangeScore";其包括更新";得分;值并更新";scoreText";同时这样做更好,因为在其他情况下,如果你必须在其他地方更改分数,你可能会忘记更新文本。示例:

[Tooltip("The player's initial score.")]
[SerializeField] private int initScore = 0;

// Serialized since you have to set the reference for it.
[SerializeField] private Text scoreText;
private int score = 0;
void Start()
{
ChangeScore(initScore);
}
// Method used to change the current player's score and update the text.
void ChangeScore(int changeValue)
{
this.score += changeValue;
scoreText.text = score.ToString();
}

// Add Some Score To The Text When The Player Hit The CheckPoint
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.name == "Player")
{
ChangeScore(100);
Debug.Log(score);
}
}

另一个附带说明:在检查碰撞时,我不会使用标签或名称,最好检查碰撞对象是否获得了PlayerController脚本

if(collider.GetComponent<PlayerController>())

而不是

if (collider.gameObject.name == "Player")

我修复了它,我把代码放在Player脚本上,而不是放在
CheckPoint剧本上

void OnTriggerEnter(Collider collider)
{
if (collider.tag == "ScoreCheckPoint")
{
score += 100;
scoreText.text = score.ToString();
Debug.Log(score);
}
}

最新更新