исправить баг м прыжком в юнити
он должен прыгать только тогда, когда стоит на земле. вот код:
using System.Collections;
using System.Collections.Generic; using UnityEngine;
public class player : MonoBehaviour {
// делаем скорость и встраиваем РБ (физику)
public float speed = 20.0f;
private Rigidbody2D rb;
public Animator charAnimator;
public SpriteRenderer sprite;
bool onGround;
Collider2D other;
// Use this for initialization
private void Awake (){
// даём физике путь к ригидбади
rb = GetComponent<Rigidbody2D> ();
charAnimator = GetComponent<Animator> ();
sprite = GetComponent<SpriteRenderer> ();
}
void Start () {
}
//движение,переворот
void Move(){
//движение
Vector3 temp = Vector3.right * Input.GetAxis ("Horizontal");
transform.position = Vector3.MoveTowards (transform.position,
transform.position + temp, speed * Time.deltaTime);
//переворот
if (temp.x < 0)
sprite.flipX = true;
else
sprite.flipX = false;
}
void Jump(){
rb.AddForce(Vector2.up * 2000);
}
void CheckGround() {
if (other.tag == "Platform")
onGround = true;
else
onGround = false;
}
// Update is called once per frame
void Update (){
CheckGround ();
if (Input.GetButton ("Horizontal")) {
Move ();
}
if (onGround == true && Input.GetButtonDown ("Jump")){
Jump ();
}
}
}
Ответы (1 шт):
Проблема в том, что метод CheckGround() находится в Update(). Судя по тому, что у вас там используется Collider2D other, смею предположить, что это идея была использовать OnTriggerEnter2D(Collider2D) и `OnTriggerExit2D(Collider2D)
Решение скорее всего такое:
Убрать CheckGround() из Update(), добавить
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Platform"))
onGround = true;
}
void OnTriggerExit2D(Collider2D other)
{
if (other.CompareTag("Platform"))
onGround = false;
}
так же обратите внимание, что это метод для триггеров, так что если вы используете физику, то тело на нем стоять не будет. Вам скорее нужны методы ниже, а также убрать галку trigger с коллайдера земли/платформы
void OnCollisionEnter2D(Collision2D other)
{
if (other.CompareTag("Platform"))
onGround = true;
}
void OnCollisionExit2D(Collision2D other)
{
if (other.CompareTag("Platform"))
onGround = false;
}
и удалите глобальную переменную Collider2D other она вам отдельно не нужна.