Я пытаюсь заставить своего персонажа дважды прыгать в Unity с C#. Это код, который я использую, но он не позволит двойному прыжку персонажа. Кто-нибудь знает решение этой проблемы?Я не могу заставить свою игру charater выполнить «Двойной прыжок»
public class Tito : MonoBehaviour {
public float speed = 1; //SIDEWAYS SPEED
public float jump = 1; //JUMP HEIGHT
public float width = 0.5079113f; //CHARACTER WIDTH
public float score; //TOTAL AMOUNT OF COLLECTED COINS
public GUIText scoreText;
public bool inair = false; // TRUE = TITO IS IN AIR
public bool grounded = false; // TRUE = TITO IS ON THE GROUND
public bool doublejump = false;
void Start()
{
GameObject Text = GameObject.Find("Text");
}
// COIN PICK UP //
void OnTriggerEnter2D(Collider2D other)
{
if(other.tag == "Coin")
{
Debug.Log ("Coins Collected = " + (score));
(score) += 1;
Destroy(other.gameObject);
}
}
void OnCollisionEnter2D(Collision2D coll)
{
// DEATH HIT //
if (coll.gameObject.tag == "Dead")
{
Debug.Log ("You died! Restarting Game");
Application.LoadLevel (Application.loadedLevel);
}
// CHECK TO SEE IF GROUNDED //
if (coll.gameObject.name == "Ground")
{
Debug.Log ("Grounded");
grounded = true;
inair = false;
doublejump = false;
}
}
void Update()
{
// LOCK ROTATION //
{
transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, 0, 0);
}
// INPUT - MOVEMENT //
if (Input.GetKey(KeyCode.RightArrow))
{
gameObject.transform.Translate(speed, 0, 0);
transform.localScale = new Vector3 (width, width, width);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
gameObject.transform.Translate(-speed, 0, 0);
transform.localScale = new Vector3 (-width, width, width);
}
if (Input.GetKey(KeyCode.Space))
{
if (grounded == true)
{
rigidbody2D.velocity = new Vector3 (0, jump, 0);
Debug.Log ("SingleJump");
grounded = false;
doublejump = true;
}
else if (doublejump == true)
{
rigidbody2D.velocity = new Vector3 (0, jump, 0);
Debug.Log ("DoubleJump");
doublejump = false;
}
}
}
/*
if (grounded == true) // IF IN TOUCH WITH GROUND
{
if (Input.GetKey(KeyCode.Space))
{
rigidbody2D.velocity = new Vector3 (0, jump, 0);
Debug.Log ("In-Air");
inair = true;
grounded = false;
}
}
*/
}
Так что происходит, когда вы пытаетесь? Что написано в журнале отладки? –
Я думаю, вы не показываете нам все. Я не вижу явной ошибки в этом коде. Может ли 'Update()' вызываться во время прыжка? Являются ли 'singlejump' и' doublejump' объявлены в области метода? –
В журнале отладки говорится: «Заземленный», когда на земле, и «InAir» и «DoubleJump» при ударе пространства один раз. – Nils