Помогите убрать бесконечные прыжки в unity с#
Помогите пожалуйста, создаю свою первую игру 2д с этим скриптом не могу убрать бесконечные прыжки и idl сам поворачивается только в одну сторону,
Using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; //для работы с ценами!
public class idle : MonoBehaviour {
Rigidbody2D rb;
Animator anim;
int Life = 3; // жизни
void Start () {
rb = GetComponent ();
anim = GetComponent ();
}
void Update () {
if (Input.GetKeyDown (KeyCode.Space)) {
pipirka (); //метод наш метод прышка
}
if (Input.GetAxis ("Horizontal") == 0 ) {
anim.SetInteger ("popka", 1);
} else {
//Flip (); //поворот героя, когдаидет в другую сторону
anim.SetInteger ("popka", 2); //если стоит то анимация стоя, бежит анимация ьега
}
}
void OnTriggerEnter2D(Collider2D shit){ // оживляет
if (shit.gameObject.tag == "life") { // проверка столкновения
Life++;
Destroy (shit.gameObject);// убрать обьект после сьедания
}
if (shit.gameObject.tag == "Finich") {
Application.LoadLevel ("Scene2");
}
}
void OnCollisionEnter2D(Collision2D shit){ //убивает
if (shit.gameObject.tag == "pipka") { // проверка столкновения
Invoke("ReloaderFuckingLevel", 2);
Life--;
}
}
void OnGUI(){
GUI.Box (new Rect (0, 0, 100, 30), "Life = " + Life);
}
void ReloadFuckingLevel(){
Application.LoadLevel (Application.loadedLevel);
}
void Flip(){
if (Input.GetAxis ("Horizontal") < 0)
transform.localRotation = Quaternion.Euler (0, 0, 0);
if (Input.GetAxis ("Horizontal") < 0)
transform.localRotation = Quaternion.Euler (0, 180, 0);
}
void FixedUpdate() {
rb.velocity = new Vector2 (Input.GetAxis ("Horizontal") * 12f, rb.velocity.y);
}
void pipirka(){
rb.AddForce (transform.up * 14f, ForceMode2D.Impulse);
}
}
Прыжки:
- добавить глобальную переменную: bool grounded = true;
- в update() поменять:
if (Input.GetKeyDown (KeyCode.Space)) {
на
if (Input.GetKeyDown (KeyCode.Space) && grounded ) {
- добавить в FixedUpdate ()
grounded = Mathf.Approximately ( rb.velocity.y, 0f );
не лучший способ, но универсальный. Поскольку я не вижу что за игра, и как выглядит, то ничего лучшего предложить не рискну.
поворачивается только в одну сторону
сложно понять по скрипту, т. к. там ещё и аниматор учавствует, но думаю, что надо расскоментарить Flip (); в update() и заменить одно из
if (Input.GetAxis ("Horizontal") < 0)
на
if (Input.GetAxis ("Horizontal") > 0)
- больше на меньше, а то там два одинаковых, и в этом уж точно смысла нет