**
泛型:
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。(以上摘抄自百度百科)
**
简单的说泛型就是为了减少代码量,增加开发效率的一种工具。在Unity3d中如何使用泛型呢,我们来看下面的例子
//对象的父物体
public Transform btnsetPosi, inputSetPosi, sliderSetPosi, dropdownSetPosi;
//button数组
public Button[] btnSet;
//inputField数组
public InputField[] inputSet;
//Slider数组
public Slider[] sliderSet;
//Dropdown数组
public Dropdown[] dropdownSet;
//分别把父物体下面的子物体添加到对应数组中
[ContextMenu("SetInit")]
void SetInit()
{
btnSet = new Button[btnsetPosi.childCount];
for (int i = 0; i < btnSet.Length; i++)
{
btnSet[i] = btnsetPosi.GetChild(i).GetComponent<Button>();
}
inputSet = new InputField[inputSetPosi.childCount];
for (int i = 0; i < inputSet.Length; i++)
{
inputSet[i] = inputSetPosi.GetChild(i).GetComponent<InputField>();
}
sliderSet = new Slider[sliderSetPosi.childCount];
for (int i = 0; i < sliderSet.Length; i++)
{
sliderSet[i] = sliderSetPosi.GetChild(i).GetComponent<Slider>();
}
dropdownSet = new Dropdown[dropdownSetPosi.childCount];
for (int i = 0; i < dropdownSet.Length; i++)
{
dropdownSet[i] = dropdownSetPosi.GetChild(i).GetComponent<Dropdown>();
}
}
代码中实现了一个获取子物体对应类型数组的功能。
这里我们发现每一个类型的数组,都要单独的去写一个获取方法,代码利用率很低,如何提高代码利用率。是我们这次研究的主要目的。
为什么不用Object?
我们知道。Unity中的类型都是基于Object的,为什么不用Object呢?可以用Object吗?
当然可以。具体要看项目的代码需求去做设计。Object的确可以提高代码利用率,但是会多一个装箱和拆箱的过程。会提降低代码的效率。所以我们首先考虑泛型的使用。
利用泛型实现上面的方法:
public Transform btnsetPosi, inputSetPosi, sliderSetPosi, dropdownSetPosi;
public Button[] btnSet;
public InputField[] inputSet;
public Slider[] sliderSet;
public Dropdown[] dropdownSet;
[ContextMenu("SetInit")]
void SetInit()
{
btnSet = GetChildList<Button>(btnsetPosi);
inputSet = GetChildList<InputField>(inputSetPosi);
sliderSet = GetChildList<Slider>(sliderSetPosi);
dropdownSet = GetChildList<Dropdown>(dropdownSetPosi);
}
//创建泛型数组
public T[] GetChildList<T>(Transform myParents) where T : Component
{
//数组获取目标的子节点
T[] mySet = new T[myParents.childCount];
for (int i = 0; i < mySet.Length; i++)
{
//获取每个子节点的类型
mySet[i] = myParents.GetChild(i).GetComponent<T>();
}
//返回数组
return mySet;
}
这样,代码就简化了。看着也很美观。