我正在制作一个统一的3D游戏,但我遇到了一个问题:
我有两个名为breakableBox
和breakableBox_2
的框。
当玩家与他们发生碰撞时,他们会添加到玩家的得分变量playerScore
并且该框隐藏自己。这是两个框使用的代码:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public static int playerScore;
public Renderer rend;
void Start()
{
rend = GetComponent<Renderer>();
rend.enabled = true;
}
void OnTriggerEnter(Collider other)
{
rend.enabled = false;
playerScore++;
}
}
然后为了显示分数,我将此脚本附加到播放器相机:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Points : MonoBehaviour {
int score = ExampleClass.playerScore;
void OnGUI()
{
GUIStyle style = new GUIStyle(GUI.skin.button);
style.fontSize = 24;
GUI.Label(new Rect(1, 1, 150, 30), score.ToString() + " points", style);
}
}
然而,分数保持为零,即使在控制台中我可以看到它将点添加到变量。如果有人知道如何帮助我解决这个问题,那就太棒了。
答案 0 :(得分:2)
您没有更新Points类中的score
int,请尝试此
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Points : MonoBehaviour {
void OnGUI()
{
int score = ExampleClass.playerScore;
GUIStyle style = new GUIStyle(GUI.skin.button);
style.fontSize = 24;
GUI.Label(new Rect(1, 1, 150, 30), score.ToString() + " points", style);
}
}
修改:正如评论中提到的@MXD一样,最好不要更新OnGUI
中的值,而是Update()
代替[或FixedUpdate()
,因为您的分数系统物理依赖]。