Skip to content

Instantly share code, notes, and snippets.

@naruse
Created April 9, 2017 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save naruse/409649dfd65958f4a8ebc3b9cdd348d8 to your computer and use it in GitHub Desktop.
Save naruse/409649dfd65958f4a8ebc3b9cdd348d8 to your computer and use it in GitHub Desktop.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
public class LODFixer {
[MenuItem("Window/FixLODRendeer")]
static void LODRendeer()
{
LODGroup[] lodgroups = (LODGroup[])GameObject.FindObjectsOfType(typeof(LODGroup));
//For every LOD group: get the current groups and get the renderer names..
foreach (LODGroup lodgroup in lodgroups)
{
SerializedObject obj = new SerializedObject(lodgroup);
LOD[] newLods = new LOD[lodgroup.lodCount];
//For every LOD level in this lodgroup..
for(int groupNR=0; groupNR < lodgroup.lodCount; groupNR++){
List<Renderer> newRens = new List<Renderer>();
//For every renderer in this lodgroup...
for(int i=0; i< obj.FindProperty("m_LODs.Array.data["+groupNR+"].renderers").arraySize;i++){
SerializedProperty prop = (SerializedProperty)obj.FindProperty("m_LODs.Array.data["+groupNR+"].renderers").GetArrayElementAtIndex(i);
SerializedProperty propRenderer = prop.FindPropertyRelative("renderer");
Renderer ren = propRenderer.objectReferenceValue as System.Object as Renderer;
if(ren!=null){
string targetName = ren.name+".ODCObj";
Transform target = ren.transform.parent.FindChild(targetName);
if(target==null){
Debug.LogWarning("No coversion found for "+targetName+ " has "+ren.sharedMaterial.shader);
newRens.Add (ren);
if(!ren.enabled)
Debug.LogError("Renderer disabled: "+ren.name);
}else{
newRens.Add (target.GetComponent<Renderer>());
if(!target.GetComponent<Renderer>().enabled){
Debug.LogError("Renderer disabled: "+target.GetComponent<Renderer>().name);
}
if(ren.enabled)
Debug.LogError("Renderer ENAbled but not added to LOD! "+ren.name);
}
Debug.Log (lodgroup.name+" ["+groupNR+"] - "+ren.name);
}
}
SerializedProperty screenHei = obj.FindProperty("m_LODs.Array.data["+groupNR+"].screenRelativeHeight");
newLods[groupNR] = new LOD(screenHei.floatValue, newRens.ToArray() );
}
if(newLods.Length>0){
Debug.Log ("Setting: "+lodgroup.name);
lodgroup.SetLODS(newLods);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment