Unity中Random.Range仅返回固定值1无法随机切换背景问题
Unity启动随机切换背景功能取值固定问题修复
问题表现
实现Unity游戏启动随机切换菜单背景的功能时,多次测试发现控制背景选择的变量BackgroundImageNumber取值恒为1,始终无法切换到第二张背景图。
核心原因
Unity的Random.Range()整数重载遵循左闭右开的取值规则:返回值范围为 ≥ 传入的最小值、< 传入的最大值,不会取到最大值本身。
原代码中写的Random.Range(1, 2),可返回的整数值只有1,永远不会生成2,因此switch逻辑永远只会走case 1的分支。
修复方式
将随机数生成语句的上界参数从2改为3,即写为Random.Range(1, 3),此时返回值会覆盖1、2两个有效值,就能实现两张图随机切换的效果。后续如果新增背景图,只需要把上界值调整为「背景图总数量+1」,同时在switch中补充对应分支即可。
修复后的完整代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class MenuBackgroundChooser : MonoBehaviour { Image BackgroundImage; int BackgroundImageNumber; public Sprite Background1; public Sprite Background2; void Awake() { BackgroundImage = GetComponent<Image>(); } void Start() { // 第二个参数设置为背景图总数量+1,新增背景时同步修改该值、补充switch分支即可 BackgroundImageNumber = Random.Range(1, 3); Debug.Log(BackgroundImageNumber); switch(BackgroundImageNumber) { case 1: BackgroundImage.sprite = Background1; break; case 2: BackgroundImage.sprite = Background2; break; } } }
可选优化:如果后续背景图数量较多,可以把公开的Sprite字段改为Sprite数组,随机生成数组下标直接赋值,不需要手写大量switch分支,维护成本更低。
内容的提问来源于stack exchange,提问作者user15249946
相关产品推荐
相关产品推荐

