2016-07-29 14 views
0
私は、次のエラーを取得しています

得続ける:私はエラーCS0029

CS0029 Cannot implicitly convert type UnityEngine.Renderer[] to 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; 
     } 
    } 
} 
+1

方法 'GetComponentsInChildren'はおそらく'レンダラ[] 'の代わりに' '一覧

+1

そのエラーに問題が何であるの戻っていますか?あなたはタイプが間違っています。また、スローアウェイリストを作成します。 'renderers'の型を正しいものに変更し、リストの作成を削除してください。 –

答えて

2

エラーが記述です。あなたはリストに結果を変換する必要があります。

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

または配列するローカル変数を変更します。

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

はなぜちょうど項目を列挙しませんか?

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

問題だ唯一のことは、GetComponentsInChildren<Renderer>()IEnumerable<Renderer>それは(配列、リスト...)

1

が何であれ、あなたは、単にタイプを省略することができ、コンパイラが仕事をさせを返すべきであるということです! `renderers '変数にメソッド呼び出しの結果を代入する場合は、新しいリストを作成する必要はありません。

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