Unity C# 如何将float变量赋值为随机选中的Array值并判断对应元素
解决方案
完全可以将float变量赋值为选中的Array值,你只需要提前把随机生成的索引/值存下来复用即可,以下是修正后的可运行代码:
public float[] spawnTime; public float spawnValue; // 如需判断是否选中数组固定位置的元素,可额外存储随机索引 private int randomIndex; IEnumerator Spawner() { // 先生成随机索引并保存,不要直接写在WaitForSeconds参数中 randomIndex = Random.Range(0, spawnTime.Length); // 用数组长度动态取范围,不要写死5 float selectedSpawnTime = spawnTime[randomIndex]; yield return new WaitForSeconds(selectedSpawnTime); // 修正原代码Instantiate的语法错误 Instantiate(object, new Vector3(1f, 1f, 0f), Quaternion.identity); // 把选中的随机值赋值给spawnValue spawnValue = selectedSpawnTime; // 场景1:判断选中的值是否等于指定数值(比如2.5f) // 注意浮点数存在精度误差,不要直接用==,用Mathf.Approximately做判断 if (Mathf.Approximately(spawnValue, 2.5f)) { Debug.Log ("Do something"); } // 场景2:判断是否选中数组指定位置的元素(比如索引为2的第三个元素),直接比较索引更精准 if (randomIndex == 2) { Debug.Log("选中指定位置数组元素,执行对应操作"); } }
核心注意点
- 不要在多个位置重复调用
Random.Range,每次调用都会生成新的随机数,会导致等待时间和后续拿到的取值不一致 - 浮点数由于存储精度特性,直接用
==比较可能出现判断失效的问题,Unity提供的Mathf.Approximately()是专门处理浮点数相等判断的方法 - 如果你的判断逻辑对应数组的固定位置,直接比较随机索引比比较浮点值更稳妥,完全不会出现精度误差问题
内容的提问来源于stack exchange,提问作者gw707
相关产品推荐
相关产品推荐

