在我的游戏中,我试图通过脚本增加/减少球的投射力和角度,
一切都工作正常,没有滞后,但是当我第一次点击一个按钮增加功率时,我的探查器中有一个巨大的峰值,之后当我第二次点击时没有大的尖峰
这是我的代码
void FixedUpdate () {
aimAngle.z = increaseAngle;
aim.transform.eulerAngles = aimAngle;
if (Input.GetButton ("Fire1")) {
IncreaseDecreaseAngleOfAimOrPower ();
}
if (Mathf.Abs( rigidBody.velocity.x) <= 0.8f && Mathf.Abs( rigidBody.velocity.x) > 0 && rigidBody.velocity.y <=0.0f) {
rigidBody.angularDrag = 5.0f;
}
}
void IncreaseDecreaseAngleOfAimOrPower(){
collider_1 = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition),Vector3.forward,1.0f);
if (collider_1) {
if (collider_1.transform.CompareTag("IncreaseAngle")) {
increaseAngle += Time.deltaTime * 25;
} else if (collider_1.transform.CompareTag( "DecreaseAngle")) {
increaseAngle -= Time.deltaTime * 25;
} else if (collider_1.transform.CompareTag ( "PowerIncrease")) {
power += Time.deltaTime * 25;
} else if (collider_1.transform.CompareTag ("PowerDecrease")) {
power -= Time.deltaTime * 25;
} else if (collider_1.transform.CompareTag ( "Shoot") && shoot) {
forceAngle.x = Mathf.Cos (aimAngle.z * Mathf.PI / 180);
forceAngle.y = Mathf.Sin (aimAngle.z * Mathf.PI / 180);
rigidBody.isKinematic = false;
rigidBody.AddForce ( (forceAngle * power),ForceMode2D.Impulse);
aim.gameObject.SetActive (false);
shoot = false;
}
}
}
答案 0 :(得分:0)
这是因为JIT编译而发生的。当您第一次调用IncreaseDecreaseAngleOfAimOrPower()时,编译器可能需要编译某些相关方法的代码。在你的情况下,它可能是Raycast(...)
。
这会使您的应用程序冻结一段时间。在下次调用该方法时,它已经编译好并且不会冻结。