├── Editor └── UIUnityRendererInspector.cs ├── LICENSE ├── README.md └── UIUnityRenderer.cs /Editor/UIUnityRendererInspector.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | 6 | [CanEditMultipleObjects] 7 | [CustomEditor (typeof(UIUnityRenderer), true)] 8 | public class UIUnityRendererInspector : UIWidgetInspector 9 | { 10 | UIUnityRenderer mRenderer; 11 | bool foldout = true; 12 | 13 | protected override void OnEnable () 14 | { 15 | base.OnEnable (); 16 | mRenderer = target as UIUnityRenderer; 17 | } 18 | 19 | protected override bool ShouldDrawProperties () 20 | { 21 | SerializedProperty sp = serializedObject.FindProperty ("renderQueue"); 22 | 23 | if (sp != null) { 24 | EditorGUILayout.BeginHorizontal (); 25 | EditorGUILayout.LabelField ("RenderQueue", sp.intValue.ToString ()); 26 | EditorGUILayout.EndHorizontal (); 27 | } 28 | 29 | mRenderer.allowSharedMaterial = EditorGUILayout.Toggle ("Use Shared Material", mRenderer.allowSharedMaterial); 30 | 31 | foldout = EditorGUILayout.Foldout (foldout, "Materials"); 32 | if (foldout) { 33 | sp = serializedObject.FindProperty ("mMats"); 34 | if (sp != null) { 35 | for (int i = 0; i < sp.arraySize; i++) { 36 | NGUIEditorTools.DrawProperty ("Material" + i, sp.GetArrayElementAtIndex (i)); 37 | } 38 | } 39 | } 40 | return true; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 watanabe toshimitsu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | UIUnityRenderer 2 | =============== 3 | 4 | Unity Renderer for NGUI 5 | 6 | NGUI3.xでParticleSystemやMeshRenderer等のオブジェクトをdepthで管理できるようにするコンポーネントです。 7 | 8 | -------------------------------------------------------------------------------- /UIUnityRenderer.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | /// 5 | /// NGUIでRenderer,ParticleSystemを扱うコンポーネント 6 | /// 7 | public class UIUnityRenderer : UIWidget 8 | { 9 | // 指定されているMaterialの値を直接変更します(NGUIのレイアウトにより変更点が都度発生するので注意) 10 | public bool allowSharedMaterial = false; 11 | 12 | [HideInInspector][SerializeField] Renderer mRenderer; 13 | 14 | [HideInInspector][SerializeField] int renderQueue = -1; 15 | 16 | [HideInInspector][SerializeField] Material[] mMats; 17 | 18 | public Renderer cachedRenderer { 19 | get { 20 | if (mRenderer == null) { 21 | mRenderer = renderer; 22 | } 23 | return mRenderer; 24 | } 25 | } 26 | 27 | /// 28 | /// Material used by Renderer. 29 | /// 30 | public override Material material { 31 | get { 32 | if (ExistSharedMaterial0 () == false) { 33 | Debug.LogError ("Renderer or Material is not found."); 34 | return null; 35 | } 36 | if (allowSharedMaterial == false) { 37 | if (CheckMaterial (mMats) == false) { 38 | mMats = new Material[cachedRenderer.sharedMaterials.Length]; 39 | for (int i = 0; i < cachedRenderer.sharedMaterials.Length; i++) { 40 | mMats [i] = new Material (cachedRenderer.sharedMaterials [i]); 41 | mMats [i].name = mMats [i].name + " (Copy)"; 42 | } 43 | } 44 | if (CheckMaterial (mMats)) { 45 | if (Application.isPlaying) { 46 | if (cachedRenderer.materials != mMats) { 47 | cachedRenderer.materials = mMats; 48 | } 49 | } 50 | } 51 | // NGUIには0番目で登録する 52 | return mMats [0]; 53 | } else { 54 | // SharedMaterial index0をNGUIに登録する 55 | return cachedRenderer.sharedMaterials [0]; 56 | } 57 | } 58 | set { 59 | throw new System.NotImplementedException (GetType () + " has no material setter"); 60 | } 61 | } 62 | 63 | /// 64 | /// Shader used by Renderer material. 65 | /// 66 | public override Shader shader { 67 | get { 68 | if (allowSharedMaterial == false) { 69 | if (CheckMaterial (mMats)) { 70 | return mMats [0].shader; 71 | } 72 | } else { 73 | if (ExistSharedMaterial0 ()) { 74 | return cachedRenderer.sharedMaterials [0].shader; 75 | } 76 | } 77 | return null; 78 | } 79 | set { 80 | throw new System.NotImplementedException (GetType () + " has no shader setter"); 81 | } 82 | } 83 | 84 | /// 85 | /// SharedMaterialに一つでもマテリアルが存在するかチェック 86 | /// 87 | private bool ExistSharedMaterial0 () 88 | { 89 | if (cachedRenderer != null && CheckMaterial (cachedRenderer.sharedMaterials)) { 90 | return true; 91 | } 92 | return false; 93 | } 94 | 95 | /// 96 | /// マテリアルが存在するかチェック 97 | /// 98 | private bool CheckMaterial (Material[] mats) 99 | { 100 | if (mats != null && mats.Length > 0) { 101 | for (int i = 0; i < mats.Length; i++) { 102 | if (mats [i] == null) { 103 | return false; 104 | } 105 | } 106 | return true; 107 | } 108 | return false; 109 | } 110 | 111 | void OnDestroy () 112 | { 113 | if (mMats != null) { 114 | for (int i = 0; i < mMats.Length; i++) { 115 | DestroyImmediate (mMats [i]); 116 | mMats [i] = null; 117 | } 118 | mMats = null; 119 | } 120 | } 121 | 122 | protected override void OnUpdate () 123 | { 124 | base.OnUpdate (); 125 | if (allowSharedMaterial == false) { 126 | if (CheckMaterial (mMats) && this.drawCall != null) { 127 | renderQueue = drawCall.finalRenderQueue; 128 | for (int i = 0; i < mMats.Length; i++) { 129 | if (mMats [i].renderQueue != renderQueue) { 130 | mMats [i].renderQueue = renderQueue; 131 | } 132 | } 133 | } 134 | } else { 135 | if (ExistSharedMaterial0 () && drawCall != null) { 136 | renderQueue = drawCall.finalRenderQueue; 137 | for (int i = 0; i < cachedRenderer.sharedMaterials.Length; i++) { 138 | cachedRenderer.sharedMaterials [i].renderQueue = renderQueue; 139 | } 140 | } 141 | } 142 | } 143 | 144 | /// 145 | /// Dammy Mesh 146 | /// 147 | public override void OnFill (BetterList verts, BetterList uvs, BetterList cols) 148 | { 149 | 150 | verts.Add (new Vector3 (10000f, 10000f)); 151 | verts.Add (new Vector3 (10000f, 10000f)); 152 | verts.Add (new Vector3 (10000f, 10000f)); 153 | verts.Add (new Vector3 (10000f, 10000f)); 154 | 155 | uvs.Add (new Vector2 (0f, 0f)); 156 | uvs.Add (new Vector2 (0f, 1f)); 157 | uvs.Add (new Vector2 (1f, 1f)); 158 | uvs.Add (new Vector2 (1f, 0f)); 159 | 160 | cols.Add (color); 161 | cols.Add (color); 162 | cols.Add (color); 163 | cols.Add (color); 164 | } 165 | } 166 | --------------------------------------------------------------------------------