@zelyy

Как сделать чтобы игрок прыгал только от земли?

при многократном свайпе вверх игрок взлетает.
Скрипт висит на UI панели и поэтому не выходит обработать касание игрока с коллайдером земли чтобы игрок мог прыгать только когда находится на земле.
есть ли код который обрабатывает касание тега с тегом типо( if(tag "Player" == tag "terrain" ) )?
{
    public GameObject player;

    Rigidbody2D rb;

    public float SpeedUp=100;
   


    public void OnBeginDrag(PointerEventData eventData)
    {if ((Mathf.Abs(eventData.delta.y)) > (Mathf.Abs(eventData.delta.x)))//если движение по вертикали больше чем по горизонтали
            if (eventData.delta.y > 0)//если движение вверх по экрану
            {
                rb.AddForce(Vector2.up * SpeedUp, ForceMode2D.Impulse);
               
            }
            else
            {

            }
            
    }
   

    public void OnDrag(PointerEventData eventData)
    {
        
    }

    void Start()
    {
       
        rb = player.GetComponent<Rigidbody2D>();
    }

  
}
  • Вопрос задан
  • 169 просмотров
Пригласить эксперта
Ответы на вопрос 3
Griboks
@Griboks Куратор тега C#
Используйте рейкаст для проверки касания и всё что угодно (тот же тег) для проверки земли.
Ответ написан
Комментировать
DanielMcRon
@DanielMcRon
C# && Unity
Либо как сказал Griboks, либо через Physics2D. OverlapCirlce, вообще в гугле есть много чего интересного, в том числе ответ на ваш вопрос
Ответ написан
Комментировать
@kostya_gorshkov
using UnityEngine;

public class playerCNTRL : MonoBehaviour
{
public float speed;
public float jumpForce;
private float moveInput;

private Rigidbody2D move;

private bool facingRight = true;

private bool isGrounded;
public Transform feetPos;
public float checkRadius;
publuc LayerMask whatIsGround;

private void Start()
{
move = GetComponent();
}

private void FixedUpdate()
{
moveInput = Input.GetAxis("Horizontal");
move.velocity = new Vector2(moveInput * speed, move.velocity.y);
if(facingRight == false && moveInput > 0)
{
Flip();
}
else if(facingRight == true && moveInput < 0)
{
Flip();
}
}

private void Update()
{
isGrounded = Physics2D.OverLapCircle(feetPos.position, checkRadius, whatIsGround);

if(isGrounded == true && Input.GetKeyDown(KeyCode.Space))
{
move.velocity = Vector2.up * jumpForce;
}
}

void Flip()
{
facingRight = !facingRight;
Vector3 Scaler = transform.localScale;
Scaler.x *= -1;
transform.localScale = Scaler;
}
}

В лауер маск надо слой земли а во всё остальльное сами поймёте. главное в чек радиус 0.3 написать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы