十八:数据类型
数据分为值类型与引用类型,值类型里包含某个值,引用类型包含值储存位置的储存地址,当值类型变化时,关联的其他数据受影响,当引用类型发生改变时,所有被改引用类型记录储存地址的数据都将受影响
//值类型变量
Vector3 pos = transform.position;
pos = new Vector3(0, 2, 0);
//引用类型变量
Transform tran = transform;
tran.position = new Vector3(0, 2, 0);
十九:Instantiate
通过instantiate可以在代码运行期间创建预制体的克隆体
instantiate(需要克隆的对象)
instantiate(需要克隆的对象,克隆出来时的位置,克隆出来时的旋转)
Instantiate(rocketPrefab, barrelEnd.position, barrelEnd.rotation)
20:数组
将同一类型的变量集合在一起方便管理,经常与for循环一起使用
public GameObject[] players;
void Start ()
{
players = GameObject.FindGameObjectsWithTag("Player");
for(int i = 0; i < players.Length; i++)
{
Debug.Log("Player Number "+i+" is named "+players[i].name);
}
}
二十一:Invoke
Invoke、InvokeRepeating 和 CancelInvoke 函数可以延时调用方法
invoke("方法名",延迟时间),invoke只能调用不含参且返回值为void的方法
public GameObject target;
void Start()
{
Invoke ("SpawnObject", 2);
}
void SpawnObject()
{
Instantiate(target, new Vector3(0, 2, 0), Quaternion.identity);
}
InvokeRepeating("方法名",延迟时间,再次调用时间),InvokeRepeating可以实现方法的重复调用
public GameObject target;
void Start()
{
InvokeRepeating("SpawnObject", 2, 1);
}
void SpawnObject()
{
float x = Random.Range(-2.0f, 2.0f);//x,z每次调用取随机值
float z = Random.Range(-2.0f, 2.0f);
Instantiate(target, new Vector3(x, 2, z), Quaternion.identity);
}
CancelInvoke("方法名"),CancelInvoke可以停止InvokeRepeating的调用
CancelInvoke ("SpawnObject", 2);
二十二:枚举
枚举可用于创建相关常量的集合,与数组不同,枚举可以理解为一个数值类型,并且可以实现相应的功能
enum Direction {North, East, South, West};
void Start ()
{
Direction myDirection;
myDirection = Direction.North;
}
Direction ReverseDirection (Direction dir)
{
if(dir == Direction.North)
dir = Direction.South;
else if(dir == Direction.South)
dir = Direction.North;
else if(dir == Direction.East)
dir = Direction.West;
else if(dir == Direction.West)
dir = Direction.East;
return dir;
}
二十三:Switch 语句
switch语句功能与if/else语句功能相似,但switch更为精简,当面临的选择过多时,使用switch可以避免代码冗长,在每一选择完成后,需使用break返回;
switch (intelligence)
{
case 5:
print ("Why hello there good sir! Let me teach you about Trigonometry!");
break;
case 4:
print ("Hello and good day!");
break;
case 3:
print ("Whadya want?");
break;
case 2:
print ("Grog SMASH!");
break;
case 1:
print ("Ulg, glib, Pblblblblb");
break;
default:
print ("Incorrect intelligence level.");
break;
}