Untiy3D,C#泛型研究实战笔记

**

泛型:

泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。(以上摘抄自百度百科)

**
简单的说泛型就是为了减少代码量,增加开发效率的一种工具。在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;
    }

这样,代码就简化了。看着也很美观。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值