@PopTop

Как сделать прыжок в другую сторону на границе экрана?

Сильно не ругайтесь пожалуйста, делаю первую игру для дочки. Подскажите пожалуйста как реализовать обычный прыжок вверх, когда персонаж находится на границе экрана/на краю платформы. У меня реализованы боковые прыжки в сторону, но когда персонаж находится на краю платформы справа, я хочу чтобы при нажатии на право персонаж прыгал не в сторону, а вверх, но при нажатии прыжка налево, чтобы персонаж прыгал по диагонали налево и тоже самое хочу реализовать с левой стороны. Я честно долго пытался найти информацию.

if ((Input.GetKeyDown(KeyCode.A)) && groundDetection.isGrounded)
{
rb.AddForce((new Vector2(-1, 1)) * force, mode: ForceMode2D.Impulse);
}

if ((Input.GetKeyDown(KeyCode.D)) && groundDetection.isGrounded)
{
rb.AddForce((new Vector2(1, 1)) * force, mode: ForceMode2D.Impulse);
}
60ffba495ad91486604095.jpeg
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 3
nikerAI
@nikerAI
ЧТО?
Возможно я не до конца понял вопрос, но можно попробовать поставить тригер, при соприкосновении с которым, на краю платформы, персонаж будет менять свою траекторию во время прыжка.
Ответ написан
alfss
@alfss
https://career.habr.com/alfss
Поставьте по бокам объект и если вы его пересекли/коснулись то начинайте движение в обратную сторону и вверх или куда вам нужно.
Ответ написан
Комментировать
@PopTop Автор вопроса
Мне подсказали, но все равно проблему не до конца решил, теперь при попадании на триггер у меня всегда прыгает вверх что при нажатии на A и D, в инспекторе тоже видно что ось х становится 0. Как исправить эту ситуацию? Надо чтобы в одну сторону игрок мог прыгать, а не только вверх
void Start()
{
rb = GetComponent();
}

public Vector2 jumpVector = Vector2.one;

private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("JumpRightUp"))
{
jumpVector = Vector2.up;
}
}

private void OnTriggerExit2D(Collider2D collision)
{
if (collision.CompareTag("JumpRightUp"))
{
jumpVector = Vector2.one;
}
}

private void Update()
{
if ((Input.GetKeyDown(KeyCode.A)) && groundDetection.isGrounded)
{
rb.AddForce((new Vector2(-1, 1) * jumpVector) * force, mode: ForceMode2D.Impulse);
}

if ((Input.GetKeyDown(KeyCode.D)) && groundDetection.isGrounded)
{
rb.AddForce((new Vector2(1, 1) * jumpVector) * force, mode: ForceMode2D.Impulse);

}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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