无法从统一的另一个C#脚本访问变量

时间:2018-05-31 15:02:44

标签: c# unity3d

我正在制作一个统一的3D游戏,但我遇到了一个问题:

我有两个名为breakableBoxbreakableBox_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);
    }
}

然而,分数保持为零,即使在控制台中我可以看到它将点添加到变量。如果有人知道如何帮助我解决这个问题,那就太棒了。

1 个答案:

答案 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(),因为您的分数系统物理依赖]。