Created
February 14, 2019 17:18
-
-
Save r-alias/02e2592db6bed6cb0758a750bf955b5f to your computer and use it in GitHub Desktop.
シェーダーがおかしくなっているマテリアルをとりあえず標準に戻す
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using System.IO; | |
using System.Collections.Generic; | |
public class ModelFixer { | |
// Hierarchyで選択されたGameObjectで使われているマテリアルのうち、 | |
// 異常なShaderをとりあえず標準のものに修正してピンク色からさよならする | |
static Shader defaultShader = null; | |
// Hierarchy配下のGameObjectに、右クリック項目を追加 | |
[MenuItem("GameObject/マテリアル修正", false, 0)] | |
static void Execute() | |
{ | |
// 右クリックしたファイルのパスを取得 | |
var gameobject = Selection.activeGameObject; | |
FixGameObjectsMaterial(gameobject); | |
} | |
static void FixGameObjectsMaterial(GameObject gameobject) { | |
FixMaterial(gameobject); | |
foreach (var child in gameobject.GetComponentsInChildren<Transform>(true)) { | |
FixMaterial(child.gameObject); | |
} | |
} | |
static void FixMaterial(GameObject gameobject) { | |
// 初回はシェーダー取ってくる | |
if (defaultShader == null) defaultShader = Shader.Find("Standard"); | |
var renderer = gameobject.GetComponent<Renderer>(); | |
if (renderer == null) return; | |
//マテリアルを取ってきてエラーの出ているシェーダーをStandardに戻す | |
var materials = renderer.sharedMaterials; | |
foreach( var material in materials) { | |
if (material.shader != null) { | |
var shader = material.shader; | |
Debug.Log(shader.name); | |
if (shader.name == "Hidden/InternalErrorShader") { | |
material.shader = defaultShader; | |
} | |
} | |
} | |
renderer.sharedMaterials = materials; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Assets配下にいれれば、右クリック時の項目に追加されているはず