当遇到需要改变变量数值的时侯,变量作为需要被赋值的无法被赋值例如:
int Heart = 15;
void Start()
{
Attack(Heart);
Debug.Log(Heart);
}
public void Attack(int num)
{
num -= 5;
}
对形参num的参数运算无法作用到Heart上,除非设定返回值去改变。也可以使用out和ref去实现
out:将方法中的参数值带出方法,但是必须要在方法内部给参数赋值,因为方法带返回值同样可以解决问题,但是out的多变性是在如果方法需要返回类型不一样的参数时可以更加灵活的使用
int Heart;
void Start()
{
Attack(out Heart);
Debug.Log(Heart);
}
public void Attack(out int num)
{
num = 10;
num -= 5;
}
ref:将参数带进方法,使用方法类似于out,但是他是把参数带入到方法里面,所以需要在方法外对参数进行赋值,方法内不能赋值,实参作为形参去改变时,会改变原有变量内存中的数据。
int Heart;
void Start()
{
Attack(ref Heart);
Debug.Log(Heart);
}
public void Attack(ref int num)
{
num -= 5;
}
params:可以把实参数组中类型一样的元素当作数组的元素去使用。但是params必须是方法中的最后一个元素。
传统的方法:int sum=0;
void Start()
{
int[] ints = {0,5,3,5,4,8};
Attack(ints);
Debug.Log(sum);
}
public void Attack(int[] num)
{
for (int i = 0; i < num.Length; i++)
{
sum += num[i];
}
}
使用了params后:int sum=0;
void Start()
{
int[] ints = {0,5,3,5,4,8};
Attack(0, 5, 3, 5, 4, 8);
Debug.Log(sum);
}
public void Attack(params int[] num)
{
for (int i = 0; i < num.Length; i++)
{
sum += num[i];
}
}
同样即使使用了params也还可以传递数组,但是直接传递数据可以减少变量的使用,params需要放到最后一个元素,否则无法识别方法中的其他int形参,且实参中传递的参数需要与形参中数组的类型一致。