public override void OnInspectorGUI() { Decal decal = target as Decal; SerializedObject so = new SerializedObject(decal); SerializedProperty matProp = so.FindProperty("material"); Material mat = matProp.objectReferenceValue as Material; mat = DrawAssetChooser("Materials", mat, materials); matProp.objectReferenceValue = mat; if (mat != null && mat.mainTexture != null) { string texPath = AssetDatabase.GetAssetPath(mat.mainTexture); Object[] assets = AssetDatabase.LoadAllAssetsAtPath(texPath); List <Sprite> sprites = new List <Sprite>(); for (int i = 0; i < assets.Length; i++) { Sprite texSprite = assets[i] as Sprite; if (texSprite != null) { sprites.Add(texSprite); } } SerializedProperty spriteProp = so.FindProperty("sprite"); Sprite sprite = spriteProp.objectReferenceValue as Sprite; if (sprites.Count > 0) { sprite = DrawAssetChooser("Sprite", sprite, sprites); sprite = DrawSpriteList(sprite, sprites); } spriteProp.objectReferenceValue = sprite; } EditorGUILayout.Separator(); if (GUILayout.Button("Build")) { decal.BuildDecal(); } if (GUI.changed) { so.ApplyModifiedProperties(); decal.BuildDecal(); GUI.changed = false; } }
private void OnEnable() { string[] matGuids = AssetDatabase.FindAssets("Decal t:Material"); for (int i = 0; i < matGuids.Length; i++) { matGuids[i] = AssetDatabase.GUIDToAssetPath(matGuids[i]); } materials.Clear(); for (int i = 0; i < matGuids.Length; i++) { materials.Add(AssetDatabase.LoadAssetAtPath <Material>(matGuids[i])); } Decal decal = target as Decal; if (decal != null && materials.Count > 0) { SerializedObject so = new SerializedObject(decal); bool anyChanged = false; Material mat = null; SerializedProperty matProp = so.FindProperty("material"); mat = matProp.objectReferenceValue as Material; if (mat == null) { mat = materials[0]; matProp.objectReferenceValue = mat; anyChanged = true; } if (mat != null && mat.mainTexture != null) { SerializedProperty spriteProp = so.FindProperty("sprite"); Sprite sprite = spriteProp.objectReferenceValue as Sprite; if (sprite == null) { string texPath = AssetDatabase.GetAssetPath(mat.mainTexture); Object[] assets = AssetDatabase.LoadAllAssetsAtPath(texPath); for (int i = 0; i < assets.Length; i++) { sprite = assets[i] as Sprite; if (sprite != null) { spriteProp.objectReferenceValue = sprite; anyChanged = true; break; } } } } if (anyChanged) { so.ApplyModifiedProperties(); decal.BuildDecal(); } } }
void OnSceneGUI() { Decal decal = (Decal)target; if (decal.transform.hasChanged) { foreach (GameObject obj in decal.subDecals) { if (obj == null) { continue; } for (int i = 0; i < obj.transform.childCount; i++) { if (obj.transform.GetChild(i) == null) { continue; } DestroyImmediate(obj.transform.GetChild(i).gameObject, true); } DestroyImmediate(obj, true); } decal.subDecals.Clear(); decal.BuildDecal(); decal.transform.hasChanged = false; } decal.Update(); }
public override void OnInspectorGUI() { Decal decal = (Decal)target; decal.decal = AssetField <Material>("Material", decal.decal); decal.offset = EditorGUILayout.FloatField("Offset", decal.offset); decal.randomRotateOnSpawn = EditorGUILayout.Toggle("Spawn with random rotation", decal.randomRotateOnSpawn); decal.layerMask = LayerMaskField("Affected Layers", decal.layerMask); EditorGUILayout.Separator(); if (GUI.changed) { decal.BuildDecal(); } }
private void OnSceneGUI() { Decal decal = target as Decal; if (decal != null && decal.transform.hasChanged) { if (decal.GetInstanceID() != lastInstanceID) { decal.GetComponent <MeshFilter>().sharedMesh = null; lastInstanceID = decal.GetInstanceID(); } UnityEngine.Profiling.Profiler.BeginSample("Decal"); decal.BuildDecal(); UnityEngine.Profiling.Profiler.EndSample(); decal.transform.hasChanged = false; } }
void doDecal(GameObject o, Vector3 cellPos) { Decal decal = o.GetComponent <Decal>(); if (decal != null) { o.transform.forward = Vector3.up; Collider[] affected = MapUtility.GetGameObjectByPosition(cellPos, 0.5f, 1 << LayerMask.NameToLayer("Decal")); decalAffectObjects.Clear(); int len = affected.Length; if (len > 0) { for (int i = 0; i < len; i++) { decalAffectObjects.Add(affected[i].gameObject); } decal.BuildDecal(decalAffectObjects); } } }