Unity3D学习笔记(三) 数组和容器(泛型)使用学习(基于C#)

(2012-07-07 23:26:11)

1.使用C#的List等容器前要头文件using System.Collections.Generic;
容器:(声明--容器实例化--元素实例化--元素入容器)
声明:public List<Transform> goals;
容器实例化:goals=new List<Transform>();
使用:goals.Add(enemy);  //添加到List末尾,enemy作为元素也是要先实例化的
      goals[0];          //获取List索引位置的元素
      goals.Count;      //变量,得到List元素个数
      goals.Clear();    //释放List的元素,设置Count=0
 
/*

注意!作为public List<WeaponData> weaponData中的类WeaponData,必须是public的,否则常会有权限错误的提示:(貌似是容器实例的权限和容器模板类的权限必须遵循一定高低关系)Inconsistent accessibility: field type `System.Collections.Generic.List<DataBase.WeaponData>' is less accessible than field `DataBase.weaponData'。其中weaponData为DataBase文件DataBase类的变量,Weapon为DataBase文件另一个类.

其余详情可以查阅msdn对于System.Collections.Generic 命名空间中List的解释:(和Unity3D中类似)http://msdn.microsoft.com/zh-cn/library/0sbxh9x2

*/
数组:(声明--数组实例化--数组元素实例化)
声明: private Skill[] _skill;
数组实例化:_skill=new Skill[Enum.GetValues(typeof(SkillName)).Length];
元素实例化:for (int cnt = 0; cnt < _skill.Length; cnt++)
               _skill[cnt] = new Skill();
①另外可以声明数组后,利用函数返回值进行数组实例化,而且此时
      GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
②使用方式可以如:
      foreach (GameObject enemy in go) {   }
③数组属于Array类,本身也有一些属性,如_skill.Length;可以获取数组长度。
④函数传递数组时,形参用(Skill[] new_skill)即可(内部用new_skill.Length获取长度)。改变函数内形参的值,实参数组也会跟着改变。
 
2.无论是数组还是容器亦或者其它变量,都可以在MonoBehaviour子类中以public权限声明后,不在脚本内实例化,而是在Unity3D软件的检视面板中赋值实现实例化。
  对于GameObject,Texture2D等类型的变量(或数组以及容器),一般都是在检视面板赋值。(但GO类型也可以用寻找GO等函数实例化,Texture2D类型则可以用C#硬盘读取图片的方式赋值)

posted @ 2013-06-15 15:03  skipop  阅读(4849)  评论(0编辑  收藏  举报