Пора значит натаскаться в математике. Нормаль, условно говоря, вектор, перпендикулярный плоскости и направленный от лицевой стороны. В случае 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));
}
}