为NGUI panel 添加 sorting layer
2015-12-21 12:29
423 查看
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 Clark
public string sortingLayerName
{
get { return (mRenderer != null) ? mRenderer.sortingLayerName : "default"; }
set
{
if(mRenderer != null && mRenderer.sortingLayerName != value)
{
mRenderer.sortingLayerName = value;
if UNITY_EDITOR
UnityEditor.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 Clark
dc.sortingLayerName = pan.sortingLayerName;
// added end by Clark
dc.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 Clark
252行左右
[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
public int sortingOrder
{
get
{
return mSortingOrder;
}
set
{
if (mSortingOrder != value)
{
mSortingOrder = value;
if UNITY_EDITOR
NGUITools.SetDirty(this);
endif
UpdateDrawCalls();
}
}
}
// added by Clark
public string sortingLayerName
{
get { return mSortingLayerName; }
set
{
if(mSortingLayerName != value)
{
mSortingLayerName = value;
if UNITY_EDITOR
NGUITools.SetDirty(this);
endif
UpdateDrawCalls();
}
}
}
// 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 Clark
dc.sortingLayerName = mSortingLayerName;
// added end by Clark
}
文件UIPanelInspector.cs 9行
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
// added by Clark
using 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 Clark
string[] sortingLayerNames;
// added end by Clark
49行左右
protected override void OnEnable ()
{
base.OnEnable();
mPanel = target as UIPanel;
// added by Clark
sortingLayerNames = 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 Clark
int sortingLayerIndex = GetSortingLayerIndex(mPanel.sortingLayerName);
int newSortingLayerIndex = EditorGUILayout.Popup("Sorting Layer", sortingLayerIndex, sortingLayerNames);
if(sortingLayerIndex != newSortingLayerIndex)
{
mPanel.sortingLayerName = sortingLayerNames[newSortingLayerIndex];
}
// added end by Clark
785行左右,在文件最后
// added by Clark
string[] 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:
文件: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 Clark
public string sortingLayerName
{
get { return (mRenderer != null) ? mRenderer.sortingLayerName : "default"; }
set
{
if(mRenderer != null && mRenderer.sortingLayerName != value)
{
mRenderer.sortingLayerName = value;
if UNITY_EDITOR
UnityEditor.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 Clark
dc.sortingLayerName = pan.sortingLayerName;
// added end by Clark
dc.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 Clark
252行左右
[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
public int sortingOrder
{
get
{
return mSortingOrder;
}
set
{
if (mSortingOrder != value)
{
mSortingOrder = value;
if UNITY_EDITOR
NGUITools.SetDirty(this);
endif
UpdateDrawCalls();
}
}
}
// added by Clark
public string sortingLayerName
{
get { return mSortingLayerName; }
set
{
if(mSortingLayerName != value)
{
mSortingLayerName = value;
if UNITY_EDITOR
NGUITools.SetDirty(this);
endif
UpdateDrawCalls();
}
}
}
// 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 Clark
dc.sortingLayerName = mSortingLayerName;
// added end by Clark
}
文件UIPanelInspector.cs 9行
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
// added by Clark
using 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 Clark
string[] sortingLayerNames;
// added end by Clark
49行左右
protected override void OnEnable ()
{
base.OnEnable();
mPanel = target as UIPanel;
// added by Clark
sortingLayerNames = 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 Clark
int sortingLayerIndex = GetSortingLayerIndex(mPanel.sortingLayerName);
int newSortingLayerIndex = EditorGUILayout.Popup("Sorting Layer", sortingLayerIndex, sortingLayerNames);
if(sortingLayerIndex != newSortingLayerIndex)
{
mPanel.sortingLayerName = sortingLayerNames[newSortingLayerIndex];
}
// added end by Clark
785行左右,在文件最后
// added by Clark
string[] 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:
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D动态对象优化代码分享
- Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
- Unity3d获取系统时间
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
- Unity3D游戏引擎实现在Android中打开WebView的实例
- unity实现多点触控代码
- 在Unity中实现动画的正反播放代码
- unity实现摄像头跟随
- unity3d调用手机或电脑摄像头
- Unity3d发布IOS9应用时出现中文乱码的解决方法
- 分享一个开源的网络游戏服务器架构—HouHai
- Unity3D插件详细评测及教学下载
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- 姜雪伟老师“双旦活动大福利”