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
相关产品推荐
相关产品推荐

