Пятница, 22 Ноября 2024, 09:13

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поворот игрока к нормали в 2D.
MihailOBoshДата: Четверг, 20 Июля 2017, 21:04 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте, я пытаюсь сделать так, что бы по нажатию кнопки, персонаж получал поворот нормали. Каждый кадр создаю CircleCast и получаю нормаль в виде двух чисел (0.0, 1.0), если игрок стоит на прямой поверхности. Объясните мне пожалуйста, что это за цифры и как мне повернуть 2D спрайт c этими значениями?
VuvkДата: Пятница, 21 Июля 2017, 05:53 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Пора значит натаскаться в математике. Нормаль, условно говоря, вектор, перпендикулярный плоскости и направленный от лицевой стороны. В случае 2D это перпендикуляр отрезка, показывающий, где у него верх. (0.0, 1.0) это и есть "вверх" в мире 2D.
В unity для поворота в сторону вектора есть Quaternion.LookRotation или Transform.LookAt, которые не прокатят в 2D, т.к. Z=0.0.
Как-то нарыл такой вот класс, помогающий вертеть 2D объекты:
Код

/** copyright Leroy Ketelaars, 2015.
  * I hereby license the entire human race to use this code as they see fit,
  * provided they maintain this license in their source code as-is.
  * A credit mention in your resulting work would be appreciated. */
using UnityEngine;
using System.Collections;

public static class TransformExtensions
{
    public static void LookAt2D (this Transform t, Vector3 worldPosition)
    {
        t.rotation = Quaternion.identity;
        t.Rotate (Vector3.forward, (Mathf.Atan2 (t.position.y - worldPosition.y, t.position.x - worldPosition.x) * 180f / Mathf.PI) - 180f);
    }

    public static void LookAt2D (this Transform t, Transform target)
    {
        t.rotation = Quaternion.identity;
        t.Rotate (Vector3.forward, (Mathf.Atan2 (t.position.y - target.position.y, t.position.x - target.position.x) * 180f / Mathf.PI) - 180f);
    }

    public static void LookAwayFrom2D (this Transform t, Vector3 worldPosition)
    {
        t.rotation = Quaternion.identity;
        t.Rotate (Vector3.forward, (Mathf.Atan2 (t.position.y - worldPosition.y, t.position.x - worldPosition.x) * 180f / Mathf.PI));
    }

    public static void LookAwayFrom2D (this Transform t, Transform target)
    {
        t.rotation = Quaternion.identity;
        t.Rotate (Vector3.forward, (Mathf.Atan2 (t.position.y - target.position.y, t.position.x - target.position.x) * 180f / Mathf.PI));
    }
}


Сообщение отредактировал Vuvk - Пятница, 21 Июля 2017, 05:55
  • Страница 1 из 1
  • 1
Поиск:

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