让球跳跃

时间:2015-03-16 22:36:53

标签: c# unity3d

我正在尝试制作一个脚本,我可以移动球,水平和垂直。我设法让它工作。

但现在我想让我的球跳起来#34;我以下面的脚本结束了,但现在我的球刚刚像火箭xD一样发射了

任何人都可以帮助我

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour 
{
    public float speed;
    public float jumpSpeed;
    public GUIText countText;
    public GUIText winText;
    private int count;

    void Start()
    {
        count = 0;
        SetCountText();
        winText.text = " "; 
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0, moveVertical);
        Vector3 jump = new Vector3 (0, jumpSpeed, 0);

        GetComponent<Rigidbody>().AddForce (movement * speed * Time.deltaTime);

        if (Input.GetButtonDown ("Jump"));
        GetComponent<Rigidbody>().AddForce (jump * jumpSpeed * Time.deltaTime);

    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "PickUp") {
            other.gameObject.SetActive(false);
            count = count +1;
            SetCountText();
        }
    }

    void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
        if (count >= 10) 
        {
            winText.text = "YOU WIN!";
        }
    }
}

3 个答案:

答案 0 :(得分:1)

在对象上添加连续力时,跳跃不起作用。首次按下跳转按钮时,您必须对对象施加一次脉冲。这种冲动也不包括时间因素,因为它只应用一次。所以你会得到这样的东西:

bool jumping;

if (Input.GetButtonDown ("Jump") && !this.jumping);
{
    GetComponent<Rigidbody>().AddForce (jumpForce * new Vector3(0,1,0));
    this.jumping = true;
}

另请注意,在您的示例中,您将向上单位向量乘以两倍的跳跃速度。进入jump向量初始化,然后进入AddForce方法。

当然,您还必须确保重力适用于将物体拉回(如果物体撞击地面,则重置跳跃布尔。

一般情况下,根据您正在制作的游戏类型,您可以更轻松地自行设置对象的速度,而不必使用Unity物理引擎来进行简单的移动。

答案 1 :(得分:0)

您的代码在FixedUpdate函数中出错:

if (Input.GetButtonDown ("Jump"));

以这种方式,你在每一帧都对你的对象施加一个力,因为分号排除了条件下面的行。通过删除分号,只要在RigidBody组件上启用了UseGravity,就会在跳转的情况下实现正确的if实现。

if (Input.GetButtonDown ("Jump"))
    GetComponent<Rigidbody>().AddForce (jump * jumpSpeed * Time.deltaTime);

希望它有所帮助。

答案 2 :(得分:0)

谢谢大家,这是一个很大的帮助。我现在有一个跳跃的角色。一个只能在接地时跳起来的人。

public bool IsGrounded;

    void OnCollisionStay (Collision collisionInfo)
{
    IsGrounded = true;  
}

void OnCollisionExit (Collision collisionInfo)
{
    IsGrounded = false;
}


if (Input.GetButtonDown ("Jump") && IsGrounded)
    {
        GetComponent<Rigidbody>().velocity = new Vector3(0, 10, 0);
    }