用代码控制NGUI
一、用代码来操作NGUI 其实在Unity当中,它的核心就是游戏物体和组件构成的,物体是游戏世界中的核心单位,游戏世界也可以说就是由GameObject组成的,所有的东西都可以说是一个游戏物体,而我们的组件,则是物体工作的核心单位,每个物体都有一个或者多个组件,这些组件决定了这个物体具有哪些功能,最基础的当然就是transform组件。
NGUI中,每一个UI控件,其实也是一个GameObject,它的原理就是在这些物体上面加入了NGUI的一些脚本组件。所以我们依然可以使用代码像操作其他游戏物体一样的来操作NGUI,来修改UI上的组件,实现对NGUI进行控制。
二、操作NGUI的简单实例 我们在Unity当中来看看实际的代码吧,我们就做一个最简单的使用代码来控制一个图片的颜色。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NGUIGetObj : MonoBehaviour {
public GameObject gameObj;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.Space)) {
UISprite sprite = gameObj.GetComponent<UISprite> ();
sprite.color = Color.green;
}
}
}
三、我们怎么来获取我们的组件呢? 刚才讲解了我们知道,我们获取NGUI组件的方式是声明一个Public的变量,然后引用物体,获得物体身上的组件,然后对组件进行修改。而在游戏开发中,我们有太多的UI控件了,如果都用public的方式来引用的话,会导致我们会丢很多东西,再如果这些东西你又恰好是放到一个类里面进行处理的话,这样会造成序列化的过程消耗太长时间,而且万一出现了一个问题导致引用丢失的话,这个真的是要死人的!几乎需要把逻辑理一遍重新在做一次UI了...
我们一般获取UI组件的方法有如下几种 (1)引用物体,就是直接声明public的物体变量,然后把物体拖上去保存该物体的引用,然后在start()函数中来获取,或者Awake()中也可以。 (2)引用组件,声明一个public的,明确组件的类型变量,就是我们直接声明一个UIButton,UISprite等等这种,然后我们直接再把物体拖上去,NGUI的组件一般都是UI开头的。 (3)寻找子物体,通过findChild的方法来一级一级的找到组件,我们可以把之前的代码稍微进行一个修改,就是我们把代码挂在UIRoot上,那么可以修改代码成这个样子。 (4)find方法(这个很耗时间,不推荐),使用GameObject.Find()的方法来寻找一个特定的特殊UI物体,但是,这个方法会遍历场景中的所有物体,非常消耗性能,不推荐使用。
我们要知道组件哪些参数可以进行修改,其实我们就直接看我们Unity中组件下面有哪些内容就可以了,然后VS也好或者MONO也好,都会有提示的。