/// <summary> /// マテリアルの shader を指定の名前のものに変更する。 /// </summary> /// <param name="name"></param> /// <param name="mats"></param> public static void ChangeShader(string name, params Material[] mats) { if (string.IsNullOrWhiteSpace(name) || mats.Length == 0) { return; // なにもしない } var newShader = Shader.Find(name); if (newShader != null) { Undo.RecordObjects(mats, "change shader"); foreach (var m in mats) { if (m == null) { continue; } var oldShader = m.shader; // 初期化処理の呼び出し (カスタムエディタを取得してAssignNewShaderToMaterialしたかったけど手が届かなかったので静的アクセス) if (WF_DebugViewEditor.IsSupportedShader(newShader)) { WF_DebugViewEditor.PreChangeShader(m, oldShader, newShader); } else if (ShaderCustomEditor.IsSupportedShader(newShader)) { ShaderCustomEditor.PreChangeShader(m, oldShader, newShader); } // マテリアルにシェーダ割り当て m.shader = newShader; // 初期化処理の呼び出し (カスタムエディタを取得してAssignNewShaderToMaterialしたかったけど手が届かなかったので静的アクセス) if (WF_DebugViewEditor.IsSupportedShader(newShader)) { WF_DebugViewEditor.PostChangeShader(m, oldShader, newShader); } else if (ShaderCustomEditor.IsSupportedShader(newShader)) { ShaderCustomEditor.PostChangeShader(m, oldShader, newShader); } } } else { Debug.LogErrorFormat("[WF][Common] Shader Not Found in this projects: {0}", name); } }
private void OnGUI() { ToolCommon.WindowHeader("UnlitWF / Migration material", "Migration materials", "古いバージョンのUnlitWFで設定されたmaterialsを最新版に変換します。"); var so = new SerializedObject(param); so.Update(); // スクロール開始 scroll = EditorGUILayout.BeginScrollView(scroll); // マテリアルリスト EditorGUILayout.LabelField("materials", EditorStyles.boldLabel); EditorGUILayout.PropertyField(so.FindProperty("materials"), new GUIContent("list"), true); EditorGUILayout.Space(); // マテリアルに UnlitWF 以外のシェーダが紛れている場合には警告 bool removeOther = ToolCommon.NoticeIfIllegalMaterials(param.materials); EditorGUILayout.Space(); so.ApplyModifiedPropertiesWithoutUndo(); so.SetIsDifferentCacheDirty(); // UnlitWF 以外のマテリアルを除去 if (removeOther) { param.materials = ToolCommon.FilterOnlyWFMaterial(param.materials); } if (ToolCommon.ExecuteButton("Convert", param.materials.Length == 0)) { // 変換 WFMaterialEditUtility.MigrationMaterial(param); // ShaderGUI側のマテリアルキャッシュをリセット ShaderCustomEditor.ResetOldMaterialTable(); // 変更したマテリアルを保存 AssetDatabase.SaveAssets(); } EditorGUILayout.Space(); // スクロール終了 EditorGUILayout.EndScrollView(); }
private void OnGUI() { var so = new SerializedObject(param); so.Update(); // タイトル EditorGUILayout.Space(); EditorGUILayout.LabelField("UnlitWF / Migration material", styleTitle); EditorGUILayout.Space(); EditorGUILayout.Space(); // メイン EditorGUILayout.LabelField("Migration materials", styleBigText); EditorGUILayout.HelpBox("古いバージョンのUnlitWFで設定されたmaterialsを最新版に変換します。", MessageType.Info); EditorGUILayout.Space(); // スクロール開始 scroll = EditorGUILayout.BeginScrollView(scroll); // マテリアルリスト EditorGUILayout.LabelField("materials", EditorStyles.boldLabel); EditorGUILayout.PropertyField(so.FindProperty("materials"), new GUIContent("list"), true); EditorGUILayout.Space(); // マテリアルに UnlitWF 以外のシェーダが紛れている場合には警告 bool removeOther = false; foreach (Material mm in param.materials) { if (ToolCommon.IsNotUnlitWFMaterial(mm)) { EditorGUILayout.HelpBox("Found Not-UnlitWF materials. Continue?\n(UnlitWF以外のマテリアルが紛れていますが大丈夫ですか?)", MessageType.Warning); if (GUILayout.Button("Remove other materials")) { removeOther = true; } break; } } EditorGUILayout.Space(); so.ApplyModifiedPropertiesWithoutUndo(); so.SetIsDifferentCacheDirty(); // UnlitWF 以外のマテリアルを除去 if (removeOther) { var newlist = new List <Material>(); newlist.AddRange(param.materials); newlist.RemoveAll(mm => !ToolCommon.IsUnlitWFMaterial(mm)); param.materials = newlist.ToArray(); } if (GUILayout.Button("Convert")) { if (new WFMaterialEditUtility().RenameOldNameProperties(param)) { // ShaderGUI側のマテリアルキャッシュをリセット ShaderCustomEditor.ResetOldMaterialTable(); // 変更したマテリアルを保存 AssetDatabase.SaveAssets(); } } EditorGUILayout.Space(); // スクロール終了 EditorGUILayout.EndScrollView(); }
public override void OnGUI(Rect position, MaterialProperty prop, string label, MaterialEditor editor) { ShaderCustomEditor.DrawShurikenStyleHeader(position, text, prop, true); }