玩家跳跃高度不一致 - Unity

Posted

技术标签:

【中文标题】玩家跳跃高度不一致 - Unity【英文标题】:Player Jumping Height is not consistent - Unity 【发布时间】:2019-10-21 08:41:57 【问题描述】:

我正在开发一款 2D 平台游戏,例如,我意识到玩家的跳跃功能并非每次都以相同的方式工作。如果玩家在移动/奔跑时跳跃或玩家在不移动的情况下跳跃,跳跃高度是不同的。

我有 2 个独立的函数 Move() 和 Jump(),Move() 使用 transform.Translate 让玩家移动,Jump() 使用rigidBody.AddForce() 让玩家跳跃。我已经尝试将播放器 Move() 函数更改为使用rigidBodies 来使播放器移动,而不是使用transform.Translate()。它没有奏效。

我也尝试过使用 transform.Translate 让玩家跳跃,这解决了跳跃高度不一致的问题,但玩家只是传送而不是跳跃

这是我的代码结构的表示,不是实际代码,因为实际代码就像 600 行

public class Player

    float JumpSpeed;
    bool isGrounded;

    void Update()
    
        if (Input.GetKey(KeyCode.A))
            Move(Directions.Left);

        if (Input.GetKey(KeyCode.D))
            Move(Directions.Right);

        if (Input.GetKeyDown(KeyCode.Space))
            Jump(JumpSpeed);
    

    public void Move(Directions dir)
    
        Vector2 speed;
        //figure out speed and etc...

        //makes the player move in the right direction and speed
        transform.Translate(speed * Time.deltaTime);
    

    public void Jump(float speed)
    
        if(isGrounded)
            rigidBody.AddForce(new Vector2(0, speed * Time.deltaTime), ForceMode2D.Impulse);
    

【问题讨论】:

我在这里看不到任何会产生您所描述的结果的东西。如果你用这里写的代码替换你的 Player 代码,它是否仍然显示相同的跳跃高度差异? 我不确定在使用 Rigidbody.AddForce 时是否需要将力乘以 Time.deltaTime。脉冲模式是动量而不是加速度,所以单位已经是m/s 而不是m/s^2。 I got the info from this Unity Answers answer @Eliasar 哦,好点子。这可能是原因,因为运行可能与变化的帧速率同时发生。 即使将实际代码替换为此处编写的代码并停止将力乘以 Time.deltaTime,它仍然显示跳跃高度的差异 @Nicolas 其实我很好奇,如果你使用transform.Translate(speed*Time.deltaTime, Space.World); 会发生什么?如果问题与正在旋转的变换有关,它可能会解决它。 【参考方案1】:

不确定这是否是您的具体问题,但是使用 translate 来移动播放器并然后增加跳跃的力量并不是解决问题的最佳方法。

我会考虑将刚体的速度部分用于跳跃和运动。这将防止翻译对象可能导致的任何奇怪现象。

【讨论】:

我也这么认为。这可能是物理和渲染引擎之间的同步问题。 Update 和 FixedUpdate 可能会以不同的方式计算您的对象位置,例如竞态条件 翻译不会影响速度,所以我不认为是这个,但我确实认为其他东西正在设置或改变速度。 显然...由于某种原因,翻译影响了速度 @Nicolas 取决于speed 的计算方式以及transform 的旋转方式,Translate 可能使您的播放器向上或向下移动更多,但它绝对没有改变rigidBody.velocity就其本身而言,我的观点是:p 很高兴它已修复!

以上是关于玩家跳跃高度不一致 - Unity的主要内容,如果未能解决你的问题,请参考以下文章

黑魂复刻游戏的玩家控制器(后跳奔跑翻滚跳跃的再重新设计)——Unity随手记

Unity3D c# 2D Game Camera Follow 正在跳跃

离子电容 WKWebView 视口高度不一致

如何解决 HTML5 输入框高度不一致的问题?

android textview高度与字号高度不一致

Unity SafeArea 在不同的起始轮换之间不一致