Android设备时跳转大小不同

时间:2016-01-20 10:42:51

标签: unity3d unity5

我创建了一个像 Infinite Runner 这样的游戏,它在Unity 5的游戏标签中正常运行,但在Android设备上,当我执行跳转时它永远不会有相同的高度。

[JhohnPoison回复更新]

  

注意:在Android 4.4.2和5.0上测试的应用注2 :在检查器中添加了一些值。

跳跃的功能

void FixedUpdate () {
    CheckPlayerInGround();
    MakeJump();
    animator.SetBool("jump", !steppingDown);
}

void CheckPlayerInGround(){
    steppingDown = Physics2D.OverlapCircle(GroundCheck.position, 0.2f, whatIsGround);
}

void MakeJump(){
    if(Input.touchCount > 0){

        if((Input.GetTouch(0).position.x < Screen.width / 2) && steppingDown){
            if(slide == true){
                UpdateColliderScenarioPosition(0.37f);
                slide = false;
            }
            audio.PlayOneShot(audioJump);
            audio.volume = 0.75f;
            playerRigidbody2D.AddForce(new Vector2(0, jumpPower * Time.fixedDeltaTime));
        }
    }
}

1 个答案:

答案 0 :(得分:5)

您遇到的错误与正在运行的帧速率相关。您拥有更高的帧速率,更频繁的更新将被调用(最大60fps)。因此,可以对身体施加不同的力量。

当您使用物理学时,您应该在FixedUpdate中完成所有工作并使用 Time.fixedDeltaTime 来扩展您的力量(而不是使用常量&#34; 7&#34;)。

void FixedUpdate () {
    CheckPlayerInGround();
    MakeJump();
    animator.SetBool("jump", !steppingDown);
}

void CheckPlayerInGround(){
    steppingDown = Physics2D.OverlapCircle(GroundCheck.position, 0.2f, whatIsGround);
}

void MakeJump(){
    if(Input.touchCount > 0){

        if((Input.GetTouch(0).position.x < Screen.width / 2) && steppingDown){
            if(slide == true){
                UpdateColliderScenarioPosition(0.37f);
                slide = false;
            }
            audio.PlayOneShot(audioJump);
            audio.volume = 0.75f;
            playerRigidbody2D.AddForce(new Vector2(0, jumpPower * Time.fixedDeltaTime)); // here's a scale of the force
        }
    }
}

更多信息: http://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html http://docs.unity3d.com/ScriptReference/Time-fixedDeltaTime.html