【问题标题】:How can I call the Score() function from TargetHit script to UpdateUI script?如何从 TargetHit 脚本调用 Score() 函数到 UpdateUI 脚本?
【发布时间】:2020-03-19 19:01:16
【问题描述】:

如何从TargetHit script 调用Score() 函数到UpdateUI? UpdateUI 会将分数显示到 Canvas。

下面是 2 个脚本的 sn-p。

TargetHit 脚本

    void OnTriggerEnter(Collider collider) 
    {
        if (collider.gameObject.tag == "Green")
        {
            AddScoreGreen();
        }
        else if (collider.gameObject.tag == "Yellow")
        {
            AddScoreYellow();
        }
        else
        {
            NoScore();
        }
        Destroy(collider.gameObject);
    }

    public int AddScoreGreen()
    {
        return ScoreIncrease + 100;
    }

    public int AddScoreYellow()
    {
        return ScoreIncrease + 50;
    }

    public int NoScore()
    {
        return ScoreIncrease = 0;
    }
}

更新UI脚本

private readonly TargetHit targetHit;
// Update is called once per frame
void Update()
{
    scoreGreen.text = targetHit.GetComponent<TargetHit>().AddScoreGreen().ToString();
    playerLevelLabel.text = "Level 1";
    timerLabel.text = FormatTime(GameManager.Instance.TimePassed);        
}

private string FormatTime(float timeInSeconds)
{
    return string.Format("Time: " + "{0}:{1:00}", Mathf.FloorToInt(timeInSeconds / 60), Mathf.FloorToInt(timeInSeconds % 60));
}

ScoreGreen() 方法使 Unity 停止,按下立即暂停的图标并且统一没有显示错误。

提前感谢您的帮助。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    首先,您实际上并没有像那样提高分数:

     public int AddScoreGreen()
     {
         return ScoreIncrease + 100;
     }
    

    您只是返回 ScoreIncrease 并在返回值中添加了 100。 ScoreIncrease 未修改。

    你可能想要这个:

    public void AddScoreGreen()
    {
        ScoreIncrease += 100;
    }
    

    接下来,这似乎是错误的:

    targetHit.GetComponent<TargetHit>()
    

    您已经在上面声明了一个 TargetHit 类型的变量:

    private readonly TargetHit targetHit;
    

    公开:

    public TargetHit targetHit;
    

    然后在 Inspector 中,将带有脚本的 Object 拖到“UpdateUI”脚本的插槽中。

    那么你应该可以调用它:

    scoreGreen.text = targetHit.getScore();
    

    为此,您应该实现“getter”功能:

    public int getScore ()
    {
        return ScoreIncrease;
    }
    

    也许将 ScoreIncrease 重命名为“score_green”并为其他颜色添加更多变量。

    【讨论】:

    • 感谢您对代码的更正。我在运行这些时遇到错误。也许我会从可能解决一些点点滴滴的错误的小需求开始。
    猜你喜欢
    • 2019-01-19
    • 2010-11-15
    • 2018-04-23
    • 2019-08-04
    • 2012-03-08
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多