Суббота, 07 Декабря 2024, 10:35

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проверка платформы под ногами при прыжке
ZigMoonTДата: Четверг, 10 Октября 2019, 21:42 | Сообщение # 1
был не раз
Сейчас нет на сайте
Добрый день, подскажите как проверить, что персонаж находится на платформе, когда он прыгает(без этой проверки персонаж отталкивается от воздуха).
Код
using UnityEngine;

public class RigidBodyHero : MonoBehaviour
{

    Rigidbody2D rb;

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

    
    void Update()
    {
        if (Input.GetKeyDown (KeyCode.Space))
        {
            Jump();
        }
    }

    void FixedUpdate()
    {
        rb.velocity = new Vector2 (Input.GetAxis("Horizontal") * 12f, rb.velocity.y);
    }

    void Jump()
    {
        rb.AddForce(transform.up * 7f, ForceMode2D.Impulse);
    }
}
InsaneSystemsДата: Четверг, 10 Октября 2019, 21:54 | Сообщение # 2
участник
Сейчас нет на сайте
Raycast или OverlapBox/Area, например.

Раз
Два


Сообщение отредактировал InsaneSystems - Четверг, 10 Октября 2019, 21:54
ZigMoonTДата: Пятница, 11 Октября 2019, 00:12 | Сообщение # 3
был не раз
Сейчас нет на сайте
InsaneSystems, перекопал кучи инфы в инете и все таки написал данный скрипт. Это для тех кто ищет решение данной проблемы (не забудьте RigidBody2D и BoxCollider).
Код
public class ControllerCharacter : MonoBehaviour
{
    public float speed;
    public float jumpForce;
    private float moveInput;

    private Rigidbody2D rb;

    private bool facingRight = true;

    private bool isGrounded;
    public Transform groundedCheck;
    public float checkRadius;
    public LayerMask whatIsGround;

    private int extraJumps;
    public int extraJumpsValue;

    private void Start()
    {
        extraJumps = extraJumpsValue;
        rb = GetComponent<Rigidbody2D>();
    }

    private void FixedUpdate()
    {
        isGrounded = Physics2D.OverlapCircle(groundedCheck.position, checkRadius, whatIsGround);

        moveInput = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);

        if (facingRight == false && moveInput > 0)
        {
            Flip();
        }
        else if (facingRight == true && moveInput < 0)
        {
            Flip();
        }
    }

    private void Update()
    {
        if (isGrounded == true)
        {
            extraJumps = extraJumpsValue;
        }

        if (Input.GetKeyDown(KeyCode.Space) && extraJumps > 0)
        {
            rb.velocity = Vector2.up * jumpForce;
            extraJumps--;
        }

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

    }

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


Сообщение отредактировал ZigMoonT - Пятница, 11 Октября 2019, 00:20
LLLДата: Воскресенье, 13 Октября 2019, 01:48 | Сообщение # 4
участник
Сейчас нет на сайте
спасиб)

Сообщение отредактировал LLL - Четверг, 17 Октября 2019, 06:04
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг