簡體   English   中英

我不斷收到錯誤CS0029

[英]I keep getting Error CS0029

我收到以下錯誤:

CS0029無法將類型UnityEngine.Renderer[]隱式轉換為System.Collections.Generic.List<UnityEngine.Renderer>

代碼是:

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

public class AssignShadersToChildren : MonoBehaviour
{
    private new GameObject renderer;

    public Shader shader; // This should hold the Shader you want to use

    void Start()
    {
        // We create a list that will hold all the renderers(objects) 
        // so we can then assign the shader
        List<Renderer> renderers = new List<Renderer>();
        renderers = GetComponentsInChildren<Renderer>();

        // For every Renderer in the list assign the materials shader to the shader
        foreach (Renderer r in renderers)
        {
            r.material.shader = shader;
        }
    }
}

該錯誤是描述性的。 您需要將結果轉換為列表:

renderers = GetComponentsInChildren<Renderer>().ToList();

或將局部變量更改為數組:

Renderer[] renderers = GetComponentsInChildren<Renderer>();

為什么不只列舉項目?

void Start()
{
    foreach (Renderer r in GetComponentsInChildren<Renderer>())
        r.material.shader = shader;
}

唯一重要的是GetComponentsInChildren<Renderer>()應該返回IEnumerable<Renderer>無論它是什么(數組,列表...)

您可以簡單地省略類型,然后讓編譯器完成工作! 如果您隨后將方法調用的結果分配給`renderers'變量,則無需創建新列表。

void Start()
{
    var renderers = GetComponentsInChildren<Renderer>();
    foreach (Renderer r in renderers)
    {
        r.material.shader = shader;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM