Unity 2d跳跃脚本

时间:2014-08-17 15:03:07

标签: c# unity3d physics

有没有人在团结的2D游戏中有一个好的跳跃脚本?我的代码有效,但仍远没有跳跃,看起来它正在飞行。

using UnityEngine;
using System.Collections;

public class movingplayer : MonoBehaviour {

public Vector2 speed = new Vector2(10,10);

private Vector2 movement = new Vector2(1,1);

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    float inputX = Input.GetAxis ("Horizontal");
    float inputY = Input.GetAxis ("Vertical");

    movement = new Vector2(
        speed.x * inputX,
        speed.y * inputY);

    if (Input.GetKeyDown ("space")){
                         transform.Translate(Vector3.up * 260 * Time.deltaTime, Space.World);
                 } 

}
void FixedUpdate()
{
    // 5 - Move the game object
    rigidbody2D.velocity = movement;
    //rigidbody2D.AddForce(movement);

}
}

3 个答案:

答案 0 :(得分:24)

通常,跳跃的人使用Rigidbody2D.AddForce Forcemode.Impulse。看起来您的物体在Y轴上被推动一次,并且由于重力会自动下降。

示例:

rigidbody2D.AddForce(new Vector2(0, 10), ForceMode2D.Impulse);

答案 1 :(得分:9)

上面的答案现在已经过时使用Unity 5或更新版本。请改用它!

GetComponent<Rigidbody2D>().AddForce(new Vector2(0,10), ForceMode2D.Impulse);

我还想补充一点,这使得跳跃高度超级私密且只能在脚本中编辑,所以这就是我所做的......

    public float playerSpeed;  //allows us to be able to change speed in Unity
public Vector2 jumpHeight;

// Use this for initialization
void Start () {

}
// Update is called once per frame
void Update ()
{
    transform.Translate(playerSpeed * Time.deltaTime, 0f, 0f);  //makes player run

    if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))  //makes player jump
    {
        GetComponent<Rigidbody2D>().AddForce(jumpHeight, ForceMode2D.Impulse);

这使得您无需返回脚本即可在Unity中编辑跳转高度。

旁注 - 我想评论上面的答案,但我不能,因为我是新来的。 :)

答案 2 :(得分:2)

使用刚体主体的Addforce()方法,确保刚体连接到对象并启用重力,     像这样的东西

{{1}}

查看哪种组合以及哪些值符合您的要求并相应使用。     希望它有所帮助