首页 > 代码库 > 切水果项目总结

切水果项目总结

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层中排的位置越靠前

切水果项目总结