为NGUI panel 添加 sorting layer
来源:互联网 发布:qq群推广淘宝店 编辑:程序博客网 时间:2024/05/21 11:23
接着上一篇文章的问题,看到了老外做的一个补丁,为ngui panel添加sorting layer,我也照着做了一个,这样ngui和unity2d就可以完全融合在一起了,层次关系可以任意设置。
ngui的版本为3.6.8,在其中添加代码:
文件:UIDrawCall.cs 109行左右
/// <summary>/// Renderer's sorting order, to be used with Unity's 2D system./// </summary>public int sortingOrder{get { return (mRenderer != null) ? mRenderer.sortingOrder : 0; }set { if (mRenderer != null && mRenderer.sortingOrder != value) mRenderer.sortingOrder = value; }}// added by Clarkpublic string sortingLayerName{get { return (mRenderer != null) ? mRenderer.sortingLayerName : "default"; }set{if(mRenderer != null && mRenderer.sortingLayerName != value){mRenderer.sortingLayerName = value;#if UNITY_EDITORUnityEditor.EditorUtility.SetDirty(gameObject);#endif}}}// added end by Clark
712行左右
/// <summary>/// Create a new draw call, reusing an old one if possible./// </summary>static UIDrawCall Create (string name, UIPanel pan, Material mat, Texture tex, Shader shader){UIDrawCall dc = Create(name);dc.gameObject.layer = pan.cachedGameObject.layer;dc.baseMaterial = mat;dc.mainTexture = tex;dc.shader = shader;dc.renderQueue = pan.startingRenderQueue;dc.sortingOrder = pan.sortingOrder;// added by Clarkdc.sortingLayerName = pan.sortingLayerName;// added end by Clarkdc.manager = pan;return dc;}
文件UIPanel.cs 130行左右
// Clipping rectangle[HideInInspector][SerializeField] UIDrawCall.Clipping mClipping = UIDrawCall.Clipping.None;[HideInInspector][SerializeField] Vector4 mClipRange = new Vector4(0f, 0f, 300f, 200f);[HideInInspector][SerializeField] Vector2 mClipSoftness = new Vector2(4f, 4f);[HideInInspector][SerializeField] int mDepth = 0;[HideInInspector][SerializeField] int mSortingOrder = 0;// added by Clark[HideInInspector][SerializeField] string mSortingLayerName;// added end by Clark252行左右
public int sortingOrder{get{return mSortingOrder;}set{if (mSortingOrder != value){mSortingOrder = value;#if UNITY_EDITORNGUITools.SetDirty(this);#endifUpdateDrawCalls();}}}// added by Clarkpublic string sortingLayerName{get { return mSortingLayerName; }set{if(mSortingLayerName != value){mSortingLayerName = value;#if UNITY_EDITORNGUITools.SetDirty(this);#endifUpdateDrawCalls();}}}// added end by Clark
1432行左右,在函数UpdateDrawCalls里面
for (int i = 0; i < drawCalls.Count; ++i){UIDrawCall dc = drawCalls[i];Transform t = dc.cachedTransform;t.position = pos;t.rotation = rot;t.localScale = scale;dc.renderQueue = (renderQueue == RenderQueue.Explicit) ? startingRenderQueue : startingRenderQueue + i;dc.alwaysOnScreen = alwaysOnScreen &&(mClipping == UIDrawCall.Clipping.None || mClipping == UIDrawCall.Clipping.ConstrainButDontClip);dc.sortingOrder = mSortingOrder;// added by Clarkdc.sortingLayerName = mSortingLayerName;// added end by Clark}
文件UIPanelInspector.cs 9行
using UnityEngine;using UnityEditor;using System.Collections.Generic;// added by Clarkusing System;using System.Reflection;using UnityEditorInternal;// added end by Clark
39行左右
UIWidget.Pivot mDragPivot = UIWidget.Pivot.Center;GUIStyle mStyle0 = null;GUIStyle mStyle1 = null;// added by Clarkstring[] sortingLayerNames;// added end by Clark49行左右
protected override void OnEnable (){base.OnEnable();mPanel = target as UIPanel;// added by ClarksortingLayerNames = GetSortingLayerNames();// added end by Clark}574行左右
GUI.changed = false;int so = EditorGUILayout.IntField("Sort Order", mPanel.sortingOrder, GUILayout.Width(120f));if (GUI.changed) mPanel.sortingOrder = so;// added by Clarkint sortingLayerIndex = GetSortingLayerIndex(mPanel.sortingLayerName);int newSortingLayerIndex = EditorGUILayout.Popup("Sorting Layer", sortingLayerIndex, sortingLayerNames);if(sortingLayerIndex != newSortingLayerIndex){mPanel.sortingLayerName = sortingLayerNames[newSortingLayerIndex];}// added end by Clark785行左右,在文件最后
// added by Clarkstring[] GetSortingLayerNames() {Type t = typeof(InternalEditorUtility);PropertyInfo prop = t.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);return (string[])prop.GetValue(null, null);}int GetSortingLayerIndex(string layerName){for(int i = 0; i < sortingLayerNames.Length; i++){if(sortingLayerNames[i] == layerName){return i;}}return 0;}// added end by Clark}
这样,在UIPanel里面就多一个选项sorting layer:
完整的修改好的文件我放到我的资源里面了。
0 0
- 为NGUI panel 添加 sorting layer
- 为NGUI panel 添加 sorting layer
- NGUI扩展:为面板(Panel)添加自定义图片遮罩
- Layer与Sorting Layer
- 为 ngui TweenPosition 添加 pingpongone
- Extjs 为panel动态添加html页面
- panel添加panel
- 为Ext.form.Panel的xtype:label添加事件
- Android中Layer-list的使用 为控件添加边线
- NGUI ScrollView Panel一直都的解决方案
- NGUI中Panel渲染顺序记录
- NGUI Panel Soft Clip原理分析
- ngui NGUI panel使用soft clip时,屏幕缩放问题
- unity 2d 和 NGUI layer
- layer弹窗内添加文本框
- NGUI动态添加
- NGUI 动态添加(改)
- NGUI动态添加widget
- 正则验证
- qt 处理文字解析异常(本地)
- 使用SQL Developer将SQL Server 2005数据库移植到Oracle 11g操作文档
- spring3.x 与 quartz2.x (JobStoreTX cluster)集群
- Ios-坐标系统(详解UIView的frame、bounds跟center属性[图])
- 为NGUI panel 添加 sorting layer
- MFC sqlserver等操作
- SSL握手过程
- 高效运算
- android 获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- SSL握手过程详解
- UVa 12372 - Packing for Holiday
- [leetcode] Longest Consecutive Sequence
- leetcode之Minimum Depth of Binary Tree