Unity多GameObject显示控制求助:仅在一个区域随机显示0
问题修正方案
原代码核心问题
- 未按区域分组管理数字对象,无法精准控制单个区域的数字显示逻辑
- 遍历
checkfirst的逻辑与需求无关,混淆了区域判断逻辑 - 单独处理
firstziro的方式不符合“每个区域自带0对象”的设定
修正思路
- 按区域分组管理数字对象,用嵌套列表对应每个区域的3个数字GameObject(建议将0的对象放在子列表索引0位置)
- 随机选中一个区域,仅在该区域显示0
- 其余区域随机激活一个非0数字对象
- 确保每个区域仅显示一个数字,其余全部隐藏
修正后代码
// 按区域分组的数字对象:每个子列表对应一个区域的3个数字(索引0为0的GameObject) [SerializeField] private List<List<GameObject>> areaNumberObjects = new List<List<GameObject>>(); void Start() { // 随机选一个要显示0的区域 int zeroAreaIndex = UnityEngine.Random.Range(0, areaNumberObjects.Count); // 遍历处理每个区域 foreach (var currentArea in areaNumberObjects) { // 先隐藏当前区域所有数字 foreach (GameObject numObj in currentArea) { numObj.SetActive(false); } } // 给选中的区域激活0 areaNumberObjects[zeroAreaIndex][0].SetActive(true); // 给其余区域随机激活非0数字 for (int i = 0; i < areaNumberObjects.Count; i++) { if (i == zeroAreaIndex) continue; int randomNonZeroIdx = UnityEngine.Random.Range(1, areaNumberObjects[i].Count); areaNumberObjects[i][randomNonZeroIdx].SetActive(true); } }
配置说明
- 在Unity Inspector中,给
areaNumberObjects添加5个元素(对应5个区域) - 每个子列表依次添加3个数字GameObject:第一个拖入0的对象,剩余两个拖入非0数字对象
内容的提问来源于stack exchange,提问作者betrice mpalanzi
相关产品推荐
相关产品推荐

