混用ngui和ugui渲染顺序问题
http://blog.csdn.net/xtxy/article/details/38332801
接着上一篇文章的问题,看到了老外做的一个补丁,为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 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行左右
- 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:
完整的修改好的文件我放到我的资源里面了。
混用ngui和ugui渲染顺序问题的更多相关文章
- Unity NGUI和UGUI与模型、特效的层级关系
目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...
- KING_Unity学习之UGUI_Canvas渲染顺序以及层次关系总结
http://blog.csdn.net/kingsea168/article/details/50252733 之前一直用NGUI开发界面,但看到现在的unity的新版本的UGUI也不错,这几天专门 ...
- Unity3D NGUI,uGUI总结
跪求官方UI系统(2014年11月底已出,用原生的比用NGUI放心) uGUI注意点 1.要防止多个canvas叠加点击穿透,canvas里面的graphics raycaster调整到恰当选项 2. ...
- [UGUI]渲染层级关系
参考链接: http://blog.csdn.net/meegomeego/article/details/42060389 Unity中的渲染顺序自上而下大致可以分为三层: 1.Camera层.可以 ...
- SKNode的渲染顺序
[SKNode的渲染顺序] SKNode的zPosition属性,指定相对于其父视图的z轴坐标. The default value is 0.0. The positive z axis is pr ...
- 【Unity笔记】UGUI物体的渲染顺序
①不同Camera的Depth.(大在前,小在后)②同Camera的SortingLayer.(下在前,上在后)③同SortingLayer下的Order in Layer.(大在前,小在后)④同Or ...
- SVG渲染顺序及z轴显示问题(zIndex)
SVG是严格按照定义元素的顺序来渲染的,这个与HTML靠z-index值来控制分层不一样. 在SVG中,写在前面的元素先被渲染,写在后面的元素后被渲染.后渲染的元素会覆盖前面的元素,虽然有时候受透明度 ...
- 关于Unity中的NGUI和UGUI
一.用Unity开发2D游戏,有三套关系 1.GUI:Unity本身自带的GUI 2.NGUI:以前在Unity中广泛来做2D的,是第三方的包,需要安装 3.UGUI:Unity5.X后(其实是Uni ...
- NGUI和UGUI动画不能设置alpha值的问题
动画播放alpha参数改变但无实际画面效果,原因是要挂一个脚本,设置实时更新数据. NGUI void Update() { widget.SetDirty(); } UGUI void Update ...
随机推荐
- 自定义 spinner
http://blog.sina.com.cn/s/blog_3e333c4a010151cj.html
- EasyPusher实现Android手机屏幕桌面直播,实时推送操作画面,用于手游直播等应用
本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/52651194 由于Android 5.0提供了捕获 ...
- linux socket详解
1 linux socket编程的固定模式 server端,bind.listen.accept client端,connect client端和server端之间的一次通信: client端,wri ...
- Memory usage of a Java process java Xms Xmx Xmn
http://www.oracle.com/technetwork/java/javase/memleaks-137499.html 3.1 Meaning of OutOfMemoryError O ...
- Android笔记之启动界面的设置
默认情况下,启动界面是白屏 我们自定义一个启动界面如下,3秒钟后进入主界面并结束启动页 SplashActivity.java package com.bu_ish.myapp; import and ...
- (转)C++ STL set() 集合
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实 ...
- 使用doctrine的内存耗尽解决办法
PHP Fatal error: Allowed memory size of xxx xxx xxx bytes exhausted 无论是插入大量数据或者查询大量数据时,都可能因为数据量太大而出现 ...
- codeforces 570D.Tree Requests
[题目大意]: 给定一棵树,树的每个节点对应一个小写字母字符,有m个询问,每次询问以vi为根节点的子树中,深度为hi的所有节点对应的字符能否组成一个回文串: [题目分析]: 先画个图,可看出每次询问的 ...
- 【USACO OPEN 10】hop
奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子,(3 <=N <= 250,000),编号为1..N. 就像任何一个好游戏一样,这样的跳格子游戏也 ...
- cannot find -lbz2 解决方法
sudo yum install -y bzip2* 或者sudo apt-get install bzip2* 还是报错就找到libbz2.so.1,建立连接或者复制到 /usr/lib/libbz ...
