[英]When I want my Player to jump he is flying (Unity2d)
您好,我想制作我的第一个 2D 游戏,但是当我想跳跃时,我的 Player 正在飞行并且他没有回到地面。 我不知道为什么它不起作用。 希望有人可以帮助我。 谢谢你。 这是我的代码:
using UnityEngine;
using System.Collections;
public class Move2D : MonoBehaviour
{
public float speed = 5f;
public float jumpSpeed = 8f;
private float movement = 0f;
private Rigidbody2D rigidBody;
// Use this for initialization
void Start()
{
rigidBody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
movement = Input.GetAxis("Horizontal");
if (movement > 0f)
{
rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
}
else if (movement < 0f)
{
rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
}
else
{
rigidBody.velocity = new Vector2(0, rigidBody.velocity.y);
}
if (Input.GetButtonDown("Jump"))
{
rigidBody.velocity = new Vector2(rigidBody.velocity.x, jumpSpeed);
}
}
}
您在跳跃时设置了 y 速度,但从不将其设置回其他任何值。 我建议你使用rigidBody.AddForce进行跳跃:
rigidBody.AddForce(transform.up * jumpSpeed, ForceMode2D.Impulse);
我还不得不说,您的第一个 if..else if...else 似乎是多余的。
如果运动> 0,你做X,运动是< 0,你做的完全一样,如果运动== 0,即使你写得不同,你仍然做同样的事情。 (如果运动 == 0 则运动 * 速度也是 0)。 所以你可以只是 state
rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
根本不使用 if 。
编辑:我不小心写错了要使用的行,现在修复它。
编辑2:因此,在这两项更改之后,您的更新 function 将如下所示:
void Update()
{
movement = Input.GetAxis("Horizontal");
rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
if (Input.GetButtonDown("Jump"))
{
rigidBody.AddForce(transform.up * jumpSpeed, ForceMode2D.Impulse);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.