You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity碰撞PlayerAI时UI文本无法递增更新问题求助

问题修复方案

核心问题排查与修复

  • UI组件赋值错误:FindObjectOfType<TextMeshProUGUI>()只会返回场景中第一个匹配的UI组件,导致plr1T和plr2T指向同一个元素,甚至可能不是目标UI。
    修复:删掉Start方法里的赋值代码,直接在Unity编辑器Inspector面板,将对应TextMeshProUGUI组件拖拽到plr1T和plr2T的变量槽中;若必须用代码查找,改用GameObject.Find("目标UI名称").GetComponent<TextMeshProUGUI>()精准定位。

  • 数值递增逻辑错误:UpdateFloat方法里的UIVal1 = +1f;是将数值直接设为1,而非递增。
    修复:改为UIVal1 += 1f;,实现每次碰撞数值加1的效果。

  • 碰撞检测生效前提:确保挂载该脚本的对象有非触发类型的Collider2D组件,PlayerAI对象有Rigidbody2D组件和Collider2D组件,且标签"PlayerAI"拼写完全一致(区分大小写)。

修正后的完整代码

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

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

    void Start()
    {
        // 初始化UI显示,避免初始状态为空
        plr1T.text = UIVal1.ToString();
    }

    void OnCollisionEnter2D(Collision2D other)
    {
        // 用CompareTag更高效,且避免空引用异常
        if (other.gameObject.CompareTag("PlayerAI"))
        {
            UpdateUI();
        }  
    }

    void UpdateUI()
    {
        UpdateFloat();
        plr1T.text = UIVal1.ToString();
        // 若需更新plr2T,补充对应逻辑
        // plr2T.text = ...;
    }
    
    void UpdateFloat()
    {
        // 正确的数值递增逻辑
        UIVal1 += 1f;
    }
}

额外说明:

  • 使用CompareTag替代直接判断tag,性能更优且能避免对象为空时的异常。
  • 提前在Start方法初始化UI文本,保证初始状态显示正常。

内容的提问来源于stack exchange,提问作者RealReM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:40:37