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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:39:40