Я бы передал параметр оси, вокруг которого вы вращаете rotation
, затем использовал бы Скрещенные произведения, чтобы найти направление "вверх" для "вперед", которое является нормалью окружности.
Использование Quaternion.LookRotation
, затем Quaternion * Vector3
, чтобы применить вращение к позиции:
public List<Vector3> Loop (Vector3 center, Vector3 rotation, Vector3 axis, float radius, int divisions)
{
List<Vector3> loop = new List<Vector3>();
for(int p = 0; p < divisions; p++)
{
float u = (float)Math.Cos(2 * Math.PI * p / divisions) * radius;
float v = (float)Math.Sin(2 * Math.PI * p / divisions) * radius;
Vector3 fromPosition = new Vector3(u, v, 0f);
Vector3 up = Vector3.Cross(rotation.normalized, axis.normalized);
Quaternion rot = Quaternion.LookRotation(rotation, up);
loop.Add(rot * fromPosition);
}
return loop;
}
Так что вы можете сделать что-то вроде: List<Vector3> res = Loop(Vector3.zero, Vector3.up, Vector3.right, 10f, 20);