using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEngine; [CustomEditor(typeof(IsoObject))] public class IsoObjectEditor : Editor { private int textureSelected = 0; private List<Texture> textures = new List<Texture>(); public override void OnInspectorGUI() { DrawDefaultInspector(); textures.Clear(); if (target is IsoObject) { IsoObject isoObject = target as IsoObject; foreach (MeshRenderer mr in isoObject.gameObject.GetComponentsInChildren<MeshRenderer>()) { if (mr.sharedMaterial.shader.name == "Unlit/IsoShader") { textures.Add(mr.sharedMaterial.GetTexture("_MainTex")); } } textureSelected = EditorGUILayout.Popup(Math.Min(textures.Count, textureSelected), new GUIContent("Select Texture").ToSingle().Concat(textures.Select(t => new GUIContent(t.name))).ToArray()); if (textureSelected != 0) { IsoTextureEditor editor = EditorWindow.GetWindow<IsoTextureEditor>(); editor.Init(textures[textureSelected - 1]); editor.Show(); textureSelected = 0; } } } } [ExecuteInEditMode] public class IsoObject : MonoBehaviour { public List<MeshRenderer> IsoMeshes; private IsoEditor isoEditor; private void OnEnable() { isoEditor = FindObjectOfType<IsoEditor>(); Camera.onPreRender += PreRender; } private void PreRender(Camera cam) { //Debug.Log(cam.GetInstanceID()); if (cam.orthographic && (isoEditor.IsoMode || cam == isoEditor.IsoCamera)) { Vector3 viewPos = cam.WorldToViewportPoint(gameObject.transform.position); foreach (MeshRenderer mr in IsoMeshes) { mr.sharedMaterial.SetVector("_CenterPoint", new Vector4(viewPos.x, viewPos.y)); } } } private void OnDisable() { Camera.onPreRender -= PreRender; } // Update is called once per frame void Update () { } }