NGUI技巧总结

NGUI技巧总结

一、UIWrapContent的使用实现UI复用

NGUI提供的一种实现UI复用的一种实现方式UIWrapContent.cs,其中WrapContent()主要实现UI的复用功能,UpdateItem()会调用onInitializeItem委托。

二、Scrollview复位

可以通过控制UIScrollBar来实现复位,UIDragScrollView.cs滑动区域。

三、自定义Mesh/骨骼与NGUI的渲染层级关系

1、控制NGUI的RenderQueue的value。

2、也可以使用多个相机控制。

3、可以使用Shader通过z值来进行控制。

四、NGUI内置Shader

NGUI内置Shader分为两种,一种可打成AssetBundle,另一种只能Resource目录下,这一种一般以“Hidden/......”开头。

五、实现UI复用的另一种方式

在滑动列表不是单列的时候,我们可以继承UIGrid,模仿UIWrapContent来实现通用滑动列表的UI复用。

六、UIDrawCall

UIDrawCall BetterList

七、Mesh网格

大概有3件事情是你想要使用可修改的网格接口:

1、新建一个网格,应该按照这个顺序来做:
①为顶点数组赋值。②为三角形数组赋值。

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    public Vector3[] newVertices;
    public Vector2[] newUV;
    public int[] newTriangles;
    void Start() {
        Mesh mesh = new Mesh();
        GetComponent().mesh = mesh;
        mesh.vertices = newVertices;
        mesh.uv = newUV;
        mesh.triangles = newTriangles;
    }
}

2、每帧修改顶点属性:
①获取顶点数组。②修改它们。③赋回网格

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    void Update() {
        Mesh mesh = GetComponent().mesh;
        Vector3[] vertices = mesh.vertices;
        Vector3[] normals = mesh.normals;
        int i = 0;
        while (i < vertices.Length) {
            vertices[i] += normals[i] * Mathf.Sin(Time.time);
            i++;
        }
        mesh.vertices = vertices;
    }
}

3、连续的改变网格的三角形数组值和顶点值 
①使用Clean刷新。②指定顶点值和其他属性。③指定索引值

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    public Vector3[] newVertices;
    public Vector2[] newUV;
    public int[] newTriangles;
    void Update() {
        Mesh mesh = GetComponent().mesh;
        mesh.Clear();
        mesh.vertices = newVertices;
        mesh.uv = newUV;
        mesh.triangles = newTriangles;
    }
}

调用Clean函数在赋予新的顶点值和三角形索引值之前是非常重要的,Unity总是检查三角形的索引值,判断它们是否超出边界。调用Clear函数后,给顶点赋值,再给三角形数组赋值,以确保没有超出数组的边界。

你可能感兴趣的:(Unity)