2015-03-16 5 views
2

Я пытаюсь создать сценарий, где я могу перемещать шар, горизонтальный и вертикальный. Мне это удалось.Сделать мяч Jumping

Но теперь я хочу, чтобы мой мяч «прыгнул». Я закончил сценарий ниже, но теперь мой мяч просто запускаются как ракета 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!"; 
     } 
    } 
} 
+0

Кажется, я помню, как читал, что для прыжков вы лучше просто установив скорость, а не пытаться придать импульс к характеру – Ewan

ответ

1

Прыжки не работает с добавлением непрерывной силы на объекте. При первом нажатии кнопки перехода вам придется применить один импульс к объекту. Этот импульс также не будет включать фактор времени, потому что он применяется только один раз. Таким образом, вы получите что-то вроде этого:

bool jumping; 

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

Также отметим, что в вашем примере вы умножая вверх единичный вектор в jumpspeed дважды. Однажды в инициализации вектора jump, а затем один раз в методе AddForce.

Конечно, вы также должны убедиться, что гравитация распространяется тянуть объект вниз (и если объект попадает на землю, сбросить прыжок BOOL.

В целом, в зависимости от того, какой игре вы делаете, проще просто установить скорость объекта самостоятельно и не работать с движком физики Unity, чтобы сделать несколько простых перемещений.

+0

Спасибо, это было очень полезно. Я решил пойти со скоростью. – JavaNoobie

0

В вашем коде есть код FixedUpdate:

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

таким образом вы применяете силу к вашему объекту в каждом кадре, потому что точка с запятой исключает строку ниже из условия. Удалив точку с запятой, вы будете иметь правильную реализацию if в случае перехода, если на вашем компоненте RigidBody включен UseGravity.

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

Надеюсь, это поможет.

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); 
    }