Skip to content

Instantly share code, notes, and snippets.

@r-alias
Created February 14, 2019 17:18
Show Gist options
  • Save r-alias/02e2592db6bed6cb0758a750bf955b5f to your computer and use it in GitHub Desktop.
Save r-alias/02e2592db6bed6cb0758a750bf955b5f to your computer and use it in GitHub Desktop.
シェーダーがおかしくなっているマテリアルをとりあえず標準に戻す
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;
}
}
@r-alias
Copy link
Author

r-alias commented Feb 14, 2019

Assets配下にいれれば、右クリック時の項目に追加されているはず

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment