1private IEnumerator teki_fadeout()2{3for(float a =1; a ==0; a-=0.01f)4{5if( gameObject.GetComponent<Renderer>().material.color == null)6{7//colorがなかった場合の処理8}9else10{11 GetComponent<Renderer>().material.color -= new Color(0,0,0,0.01f);121314}15 yield return new WaitForSeconds(0.05f);16}1718Destroy(gameObject);19}
By default, Unity considers a color with the property name name "_Color" to be the main color. Use the [MainColor] ShaderLab Properties attribute to make Unity consider a color with a different property name to be the main color.
上記の情報を元に、テストプログラムを書いてみました。
csharp
1usingUnityEngine;2usingUnityEditor;34/*
5 選択したマテリアルのMainColorを探すウィンドウ
6 エディタのメニューより「Test」→「Test02」で表示
7 */8publicclassTest02:EditorWindow{9[MenuItem("Test/Test02")]10staticvoidOpen()11{12 EditorWindow.GetWindow<Test02>();13}1415publicMaterial material =null;16publicstring message ="";1718voidOnGUI()19{20Material material = EditorGUILayout.ObjectField("Material",this.material,typeof(Material),true)asMaterial;21if(material ==null){22this.material =null;23this.message ="";24}25elseif(this.material ==null|| material.GetInstanceID()!=this.material.GetInstanceID()){26this.material = material;27Shader shader =this.material.shader;28// 最初に、デフォルトの名前を探しておく。無ければ、-1が返る。29int mainColorIndex = shader.FindPropertyIndex("_Color");30int numProperties = shader.GetPropertyCount();31// プロパティの中で、MainColorフラグを持つものを探す。32for(int i =0; i < numProperties;++i){33var flags = shader.GetPropertyFlags(i);34if((flags & UnityEngine.Rendering.ShaderPropertyFlags.MainColor)!=0){35 mainColorIndex = i;36break;37}38}39// 見つかった。40if(mainColorIndex >=0){41this.message =string.Format("MainColor is {0}.", shader.GetPropertyName(mainColorIndex));42}43// 見つからなかった。44else{45this.message ="no main colors.";46}47}48 EditorGUILayout.LabelField(this.message);49}50}51
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。