动态加载UI

1.首先我们必须要明确一下就是为什么我们要动态加载UI元素呢?

因为在游戏中,我们会遇到比如进入一个场景后,场景内点击某个UI按钮,然后会弹出一个页面,这个页面并不是直接通过隐藏来显示出来,而是通过预设动态加载进来的,这个时候其实我们的UI是根据玩家的信息不同而改变,或者根据玩家操作的不同动态改变的。这个时候其实就是会用到我们动态来加载UI了。

2.要动态加载UI,首先我们必须要把UI元素做成prefab,我们只需要直接把我们制作好的UI拖动到project视图中,就会自动生成一个prefab了,这个也就是我们UI的预设物体了。

3.好了有了UI的预设了,我们必须要把UI元素保存成预设prefab,游戏中才能用代码动态的区加载它,还有就是因为UI元素一般都非常多,而且有些是可以重复使用的,那么我们用预设的话,就可以节约很多资源了,比如我们的任务栏,其实每一栏都是差不多的只是数据不一样而已,还有就是例如我们的背包格子,我们可以用预设,然后自动生成100个。并且还有一个优势,就是我们修改的时候,只用修改一个就可以将所有的同类或者使用到的地方给修改了,一举多得。我们只需要拖动一个预设出来,然后修改过后点击一下apply,然后就可以应用到所有调用这个预设的地方了。

4.现在我们有了预设,我们接下来就要在代码中来添加他们了,要动态添加的话,代码其实我们需要用到的就一句话就是我们的NGUITools.AddChild()方法就可以了。这个方法是NGUI工具类中最常用的一个了。它可以直接将一个物体设置为另外一个物体的子物体,并且这个子物体的位置直接就在父物体所在的位置。这个方法可以传入两个参数,一个是父物体,一个是子物体,接下来我们就去Untiy中来看看吧。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AddNewObj : MonoBehaviour {

    public GameObject Root;
    public GameObject HeartPrefab;

    private int count;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKeyUp (KeyCode.Space)) {
            GameObject hreat = NGUITools.AddChild (Root, HeartPrefab);
            hreat.transform.localPosition = new Vector3 (count * 98, 0, 0);
            count++;
        }
    }
}

5.NGUITools.AddChild()方法和我们Unity自带的Instantiate的区别是什么呢?可能大家都知道Unity中的话,原生的实例化一个对象的方法就是Instantiate啦,那么为什么我们还要用NGUI.AddChild()方法呢?其实,大家去看看NGUI的addchild方法就知道了,两者其实是一样的,NGUI只是进行了一个封装而已,我们自己也可以写的,来我们再来用Unity的原生的方法来实现一下吧。

results matching ""

    No results matching ""