-1

如何在 ac# 脚本中制作和更改文本?

我目前有这段代码,但它不起作用,因为我告诉脚本我要更改的文本是什么:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class treeBreak : MonoBehaviour
{
    public float woodCount = 0; 
    public Text woodText;
    private void OnTriggerEnter2D(Collider2D other){
        if (other.CompareTag("sword")){
        Destroy(gameObject);
        woodCount = woodCount + 1;
        }    
    }
    void Update(){
        woodText.text = woodCount.ToString();
    }
}
4

2 回答 2

2

问题很少。首先,如果您销毁对象,则会丢失 woodCount 字段,因为它将与对象一起被销毁。其次,如果对象被销毁,Update 方法永远不会执行,因此文本不会更新。

解决方案 1:解决此问题的更快方法是将 woodCount 设为static。然后更新 OnTriggerEnter2D 中的文本。

public class treeBreak : MonoBehaviour
{
    public static float woodCount = 0; // Stick with the class.
    
    public Text woodText;
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("sword"))
        {
            woodCount = woodCount + 1;
            woodText.text = woodCount.ToString();
            Destroy(gameObject);
        }
    }
}

解决方案 1:如果您将游戏逻辑与 UI 分开,则更好的方法...例如:

public class TreeBreak : MonoBehaviour
{   
    public WoodCounter woodCounter;
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("sword"))
        {
            woodCounter.Collect();
            Destroy(gameObject);
        }
    }
}

public class WoodCounter : MonoBehaviour
{
    public Text woodText;

    private int woodCount = 0;

    public void Collect()
    {
        woodCount++;
        woodText.text = woodCount.ToString();
    }
}

PS:woodCount如果只加一应该是整数

于 2021-01-09T09:43:46.710 回答
0

尝试交换这两行

woodCount = woodCount + 1;
Destroy(gameObject);


private void OnTriggerEnter2D(Collider2D other){
        if (other.CompareTag("sword")){
          woodCount = woodCount + 1;
          woodText.text = woodCount.ToString();
          Destroy(gameObject);
        }   
}
于 2021-01-09T06:03:29.173 回答