Unity2d像teleport一样跳跃

时间:2016-06-21 19:46:24

标签: unity3d unityscript

我正在研究Unity2d Sprite,但是出了点问题:在我的代码中,当我按下跳转按钮时,我的角色像瞬移一样跳跃,它在向上方向上非常快。重力为9,我的Rigidbody2D质量为1.我的代码是:

if(isGrounded == true && moveH == 0) {

    if (Input.GetKeyDown(KeyCode.J)) {

        anim.SetBool("str_jump", true);
        //rgBody.velocity = new Vector2(0,jumpHeight);                
        //rgBody.AddForce(Vector2.up * jumpHeight);                
        transform.position = new Vector2(transform.position.x,
                                         transform.position.y * jumpHeight);
        isGrounded = false;

    }

}

4 个答案:

答案 0 :(得分:2)

如果跳跃太高,则必须使用变量来修改跳跃的高度。在您的情况下,您使用jumpHeight作为变量来修改跳转的高度。

减少jumpHeight 解决您的问题。请注意,如果jumpHeight被声明为public(public float jumpHeight;),则必须从编辑器或函数更改变量,因为它在声明时不会使用分配给它的数字。它将使用编辑器分配给它的任何内容。

例如,当您拥有public float jumpHeight = 4;但在编辑器中将值设置为0时,0将用作值4

此外,您必须使用rgBody.AddForce(Vector2.up * jumpHeight);。取消注释,然后删除transform.position = new Vector2(transform.position.x,transform.position.y *jumpHeight);代码行。

如果这不能解决您的问题,那么您必须使用完整的代码更新您的问题。

答案 1 :(得分:0)

对于一个不错的跳跃你也可以使用rgBody.AddForce((Vector2.up * jumpHeight), ForceMode2D.Impulse);它模拟对你的物体的影响,你得到一个很好的跳跃模拟。

不要忘记宣布public float jumpHeigt = 4f;之类的“程序员”之前说过。

我希望它会对你有所帮助。

答案 2 :(得分:0)

简单地减少jumpHeight值将解决跳跃的初始问题太高。

但是,如果你想要一个更逼真的“跳跃”,你可能想要利用Rigidbody2D.velocity,只需让rgBody.velocity = new Vector2(rgBody.velocity.x, jumpHeight);创造一个漂亮的平滑跳跃。

如果您使用Rigidbody2D.velocity而不是简单地更改变换意味着您可以更改重力比例等值,这将对您的播放器的移动产生明显的影响。您可以使用不同的jumpHeight和Gravity Scale值来查找最适合您游戏的内容。

答案 3 :(得分:0)

使用transform.position'+ ='而不是'='。这样,您可以添加到它的位置,而不是将其设置为某个数字(这就是为什么它如此传送的原因)。我认为这种方法仅适合水平移动(如果是侧面游戏)。对于跳跃,使用AddForce会更好。