你好,我想做我的第一个游戏在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似乎是多余的。
如果movement > 0,你做X,如果movement是< 0,你做的完全一样,如果movement == 0,你做的还是一样,即使你写的不一样。(如果movement ==0,那么movement * speed也是0)。所以你可以直接写成
rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
根本不用if。
edit: 我不小心写错了一行字,现在修正了。
edit2: 所以在做了这两处改动之后,你的Update函数就会变成这样。
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);
}
}