Top.Mail.Ru
Ответы

Помогите убрать бесконечные прыжки в 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);
}

}

По дате
По рейтингу
Аватар пользователя
Мыслитель
5лет

Прыжки:
- добавить глобальную переменную: 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)
- больше на меньше, а то там два одинаковых, и в этом уж точно смысла нет