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

Unity健身追踪APP实例化对象集数标签显示异常求助

健身APP集数标签显示异常问题解决

问题根源

你代码里的核心错误是没有正确引用实例化出来的新对象,而是一直在操作原始预制体:

  • 你写的GameObject _set = setObject;只是把预制体本身赋值给变量,不是刚生成的那个新实例
  • 所以调用UpdateSetText时,实际改的是预制体的文本,不是ScrollView里刚创建的对象的文本,这就导致所有实例的标签都不对

修正后的代码

按钮点击触发代码(关键修正)

public class ActiveWorkoutDrillObject : MonoBehaviour
{
    public TMP_Text drilNameDisplay;
    public List<GameObject> sets = new List<GameObject>();
    public GameObject scrollViewArea;
    public Transform setsScrollview;
    public GameObject setObject;
    public int totalReps;
    public int setNum;
    public GameObject helpScreen;

    void Start()
    {
        setNum = 0;
    }

    public void AddSet()
    {
        setNum++;
        
        // 重点:把Instantiate的返回值赋值给_set,这才是刚创建的实例
        GameObject _set = Instantiate(setObject, setsScrollview);
        sets.Add(_set);

        int _viewSize = sets.Count * 155;
        scrollViewArea.GetComponent<RectTransform>().sizeDelta = new Vector2(950, _viewSize);
        
        // 现在修改的是新实例的标签
        _set.GetComponent<ActiveWorkoutSetObject>().UpdateSetText(setNum);
    }
}

实例化对象的标签更新代码(可选优化)

public class ActiveWorkoutSetObject : MonoBehaviour
{
    private ActiveWorkoutDrillObject activeWO;
    public int reps;
    public TMP_Text setsDisplay;
    public TMP_Text repsDisplay;

    void Start()
    {
        activeWO = GameObject.FindObjectOfType<ActiveWorkoutDrillObject>();
    }

    public void UpdateSetText(int _setNum)
    {
        // 直接加上"Set "前缀,符合需求中的显示格式
        setsDisplay.text = $"Set {_setNum}";
    }
}

额外提示

  • 避免在Start()中使用GameObject.FindObjectOfType<ActiveWorkoutDrillObject>(),可以在实例化时直接通过参数传递父对象引用,提升性能
  • 缓存scrollViewArea的RectTransform组件,避免每次调用GetComponent

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:00:58