最近在做一个unity的小游戏,许多基础知识还不是很懂。参数传递中遇到的小问题就卡住了半天。虽然最后把这个问题解决了,但其中原理还不是很懂。先码下来,既让自己以后少走弯路,也希望有路过的大佬能解释一下原因。
我要做一个需要蓄力的力场,蓄力时间越久,力场持续时间越长。由于OnTriggerEnter()是碰到时就判定,所以我分成了蓄力和力场两部分代码。只需要将蓄力所得时间传递给蓄力结束生成的力场即可。这里采取了调用函数获得参数的办法。
蓄力代码:
if ((Input.GetKeyUp(KeyCode.Q))
{
Vector3 position;
position.x = 0;
position.y = -0.62f;
position.z = 0;
Q_Area.Get_Time(storing_time);//先调用传递参数的函数
Instantiate(Q_Area, position, Quaternion.identity);//再创建物体
Destroy(this.gameObject, 3f);
}
力场被调用的函数:
public class Q_Area : MonoBehaviour
{
public float Q_time = 2f;
......
public void Get_Time(float t)
{
Q_time = t;
}
......
}
最令我不得其解的地方已经写在上面的注释内了,我原以为要调用力场的Get_Time()函数,需要先Instantiate()生成一个力场才行。可这么做的后果是,每次Get_Time()获得的都是上次蓄力传来的值。
而若先调用Get_Time()函数,后生成力场,则无此问题。