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

C#协程运行异常求助:GetComponent<Renderer>()报错问题

问题根源与修复方案

嘿,一眼就揪出问题啦——你把model1和model2声明成了float类型,但却在调用GetComponent<Renderer>()方法!float是纯数值类型,根本没有这个成员方法,这就是报错的直接原因。

第一步:修正变量类型

把这两个变量的类型从float改成GameObject(或者直接改成Renderer更高效),这样才能正确获取渲染组件:

// 改成GameObject类型,后续可获取其Renderer组件
public GameObject model1;
public GameObject model2;

// 或者直接声明为Renderer,提前在编辑器赋值更高效
// public Renderer model1Renderer;
// public Renderer model2Renderer;

第二步:优化协程代码(避免重复调用+空引用检查)

原代码还有两个小隐患:一是每次循环两次累加Time.deltaTime,二是没缓存Renderer组件(每帧调用GetComponent会浪费性能)。这里给你优化后的版本:

public IEnumerator colorlerpin() {
    // 先获取并缓存Renderer组件,避免每帧重复查找
    Renderer model1Renderer = model1?.GetComponent<Renderer>();
    Renderer model2Renderer = model2?.GetComponent<Renderer>();
    
    // 空引用检查,防止后续代码崩溃
    if (model1Renderer == null || model2Renderer == null) {
        Debug.LogError("Model 1或Model 2缺少Renderer组件!");
        yield break; // 终止协程
    }

    float elapsedTime = 0.0f;
    float totalTime = 1f;

    while (elapsedTime < totalTime) {
        // 淡出主模型
        elapsedTime += Time.deltaTime;
        float fadeProgress = Mathf.Clamp01(elapsedTime / totalTime); // 确保进度始终在0-1之间
        model1Renderer.material.color = Color.Lerp(Color.white, new Color(1f, 1f, 1f, 0f), fadeProgress);
        yield return null;

        // 淡入另一个模型
        elapsedTime += Time.deltaTime;
        fadeProgress = Mathf.Clamp01(elapsedTime / totalTime);
        model2Renderer.material.color = Color.Lerp(new Color(1f, 1f, 1f, 0f), Color.white, fadeProgress);
        yield return null;
    }
}

最后一步:编辑器赋值

别忘了在Unity编辑器里,把你要控制的模型拖到脚本组件的model1和model2插槽里,不然会触发空引用异常哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:47:14