标签:
2/3D游戏:2D
辅助插件:NGUI
游戏制作难度系数:初级
用到的其他工具:Trail Renderer(拖尾组件)
1、NGUI使背景图片适应任何分辨率
void Start() { UIRoot root = GameObject.FindObjectOfType<UIRoot>(); if (root != null) { float s = (float)root.activeHeight / Screen.height; int height = Mathf.CeilToInt(Screen.height * s); int width = Mathf.CeilToInt(Screen.width * s); UISprite sprite = this.gameObject.GetComponent<UISprite>();//背景图片 sprite.height = height; sprite.width = width; } }
2、NGUI批量处理按钮事件
void Start() { UIButton[] buttons = this.gameObject.GetComponentsInChildren<UIButton>();//获取场景中所有按钮 if (buttons != null && buttons.Length > 0) { foreach (var item in buttons) { UIEventListener.Get(item.gameObject).onClick += ButtonClick;//为每个按钮赋予同一个点击事件 } } } void ButtonClick(GameObject obj) { switch (obj.name) { case "play"://开始游戏 this.gameObject.SetActive(false); GameObject panel = Resources.Load("mainpanel") as GameObject;//mainpanel游戏主界面已存储为一个预设 NGUITools.AddChild(Camera.main.gameObject, panel);//把此预设加载到maincamera下面 break; case "moregame"://更多游戏 Application.OpenURL("http://www.cnblogs.com/mrzivchu"); break; case "credits"://创建者信息 Application.OpenURL("http://www.cnblogs.com/mrzivchu"); break; default: break; } }
3、解决粒子特效被NGUI遮挡的问题
修改Camera下的Culling Mask为Everything(默认为Unnamed 8)(这个必须要设置成这样)
修改NGUI中的UIPanel脚本中的默认的RenderQueue是3000, 调整到3000以下,这样就不会遮挡粒子特效了,一般例子效果的RenderQueue也是3000,可以从下面的步骤看出粒子效果的RenderQueue值(渲染队列):,fire1是粒子特效,依次点击fire1下面的outercore,innercore,smoke,在后缀为Render的组件里,点击edit…,,,
就可以看出RenderQueue的值了!当有的UIPanel需要显示在特效上面时,在Hirerarchy面板中把该UIPanel的Renderer Q选项调整为Start At,值为3000以上,就可以解决!
修改粒子特效的Shader中的RendererQueue值的通用代码:
public UIPanel panel; public enum rendertype { front, back } public rendertype type = rendertype.front; void Start() { int num = panel.startingRenderQueue; num += (type == rendertype.front) ? 1 : -1; Renderer[] sys = GetComponentsInChildren<Renderer>();//如果自己也有Render也会算在内 foreach (Renderer item in sys) { item.material.renderQueue = num; } }
另外:
上面解决的是NGUI关于粒子遮挡的问题,如果是使用Unity自身的Particle System粒子系统,,那么解决例子系统的办法是:对粒子系统进行 如下操作:
void Start() { particleSystem.renderer.sortingLayerName = "Default"; particleSystem.renderer.sortingOrder = 2; }
为粒子系统指定好一个层,并指定粒子系统在此层的前后排序位置,sortingOrder越大,那么在Default层中排的位置越靠前
标签:
原文地址:http://www.cnblogs.com/MrZivChu/p/cutfriuts.html