我正在研究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;
}
}
答案 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会更好。