为什么我第一次点击按钮时我的探查器出现峰值?

时间:2016-07-04 13:40:26

标签: c# optimization unity3d profiler

在我的游戏中,我试图通过脚本增加/减少球的投射力和角度, 一切都工作正常,没有滞后,但是当我第一次点击一个按钮增加功率时,我的探查器中有一个巨大的峰值,之后当我第二次点击时没有大的尖峰
这是我的代码

    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;
        }
    } 

}

这是我第一次点击时的屏幕截图 enter image description here

这是我第二次点击时的屏幕截图 enter image description here

1 个答案:

答案 0 :(得分:0)

这是因为JIT编译而发生的。当您第一次调用IncreaseDecreaseAngleOfAimOrPower()时,编译器可能需要编译某些相关方法的代码。在你的情况下,它可能是Raycast(...)

这会使您的应用程序冻结一段时间。在下次调用该方法时,它已经编译好并且不会冻结。