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

Unity报错CS0029:无法将void隐式转换为bool问题求助

解决Unity CS0029: 无法将void隐式转换为bool的错误

错误原因

你代码里的SceneManager.LoadScene("SampleScene")是**无返回值(void类型)**的方法,但你把它放在了if条件判断里——if要求括号内必须是bool类型的表达式,这就导致了类型不匹配的错误。而且当前逻辑本身存在问题:Update每帧都会执行这个判断,会反复触发场景加载,完全不符合加载界面的需求。

修复方案

加载场景需要用异步加载的方式,这样才能在加载过程中正常显示加载界面。以下是修正后的完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Loadingscreen : MonoBehaviour
{
    public GameObject LOADING;

    void Start()
    {
        LOADING.SetActive(false);
        // 启动异步加载协程,若需通过按钮触发,可将此代码移至按钮点击回调
        StartCoroutine(LoadTargetSceneAsync());
    }

    IEnumerator LoadTargetSceneAsync()
    {
        // 显示加载界面
        LOADING.SetActive(true);
        
        // 开始异步加载目标场景
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("SampleScene");
        
        // 等待加载完成
        while (!asyncLoad.isDone)
        {
            // 可选:添加加载进度更新逻辑,比如给进度条赋值
            // float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f);
            yield return null;
        }
        
        // 加载完成后隐藏加载界面(按需调整)
        LOADING.SetActive(false);
    }
}

关键说明

  • 如果需要通过按钮点击触发场景加载,把StartCoroutine(LoadTargetSceneAsync())代码放到按钮的点击事件回调方法中,而非Start方法里。
  • AsyncOperation.progress的取值范围是0到0.9,加载完成时会直接跳到1.0,所以做进度条时需要用Mathf.Clamp01(asyncLoad.progress / 0.9f)将进度映射到0-1的区间。

内容的提问来源于stack exchange,提问作者Jordan Klaas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:03:10