您好,我想制作我的第一个 2D 游戏,但是当我想跳跃时,我的玩家正在飞行,并且他不会回到地面。我不知道为什么它不起作用。希望有人能帮助我。谢谢。这是我的代码:
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,你做完全相同的事情,并且 如果 move == 0,即使你写得不同,你仍然会做同样的事情。 (如果运动 == 0,则运动 * 速度也为 0)。所以你可以直接声明
rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
根本不使用 if 。
编辑:我不小心写错了要使用的行,现在修复它。
edit2:因此,在这两项更改之后,您的更新函数将如下所示:
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);
}
}
关于c# - 当我希望我的玩家跳跃时,他正在飞翔(Unity2d),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62406957/