unity3d 我在与玩家碰撞时无法更改UI文本

83qze16e  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(235)

代码如下:

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

public class PointSystem : MonoBehaviour
{
    public Rigidbody2D rb1;
    public Rigidbody2D rb2;
    public TextMeshProUGUI plr1T;
    public TextMeshProUGUI plr2T;
    public float UIVal1 = 1f;

    void Start()
    {
        plr1T = FindObjectOfType<TextMeshProUGUI>();
        plr2T = FindObjectOfType<TextMeshProUGUI>();
    }
    void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.tag == "PlayerAI")
        {
            UpdateUI();
        }  
    }

    void UpdateUI()
    {
        plr1T.text = (UIVal1.ToString());
        UpdateFloat();
    }
    
    void UpdateFloat()
    {
        UIVal1 = +1f;
    }

}

我想改变UI文本一旦他们碰撞一个对象,并增加值,所以如果他们再次击中它的数字在文本中增加。它也没有显示任何错误。请帮助。
我尝试过使用ToString()方法,但它仍然不能更改文本。

jjjwad0x

jjjwad0x1#

我在您的代码中发现了一些小错误:

  1. FindObjectOfType返回与指定类型匹配的第一个活动加载对象。如果没有对象与该类型匹配,则返回null。由于您在公共环境中设置了plr1T和plr2T,因此您可以在检查器中指定它们。如果这样做,您可以从Start()方法中删除代码。请查看此处的文档:https://docs.unity3d.com/ScriptReference/Object.FindObjectOfType.html
    1.这并不是一个真正的错误,而是一个最佳实践。在检查标记之后,可以进行空值检查以避免异常错误。
    您可以:
if(other.gameObect != null)

在调用此代码之前:

UpdateUI();

1.如果按1递增,则可以执行以下操作:UIVal1++,或UIVal1 += 1。

sbdsn5lh

sbdsn5lh2#

你在递增UIVAL1时犯了一个错误,正确的方法是:

void UpdateFloat()
        {
            UIVal1 = UIVal1 +1;
        }

相关问题