├── 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 |
--------------------------------------------------------------------------------