public static UnityEngine.Vector3 AroundAxis(this IRandom rng, Vector3 axis) { var a = rng.Angle(); if (VectorUtil.NearSameAxis(axis, Vector3.forward)) { return(Quaternion.AngleAxis(a, axis) * VectorUtil.GetForwardTangent(Vector3.up, axis)); } else { return(Quaternion.AngleAxis(a, axis) * VectorUtil.GetForwardTangent(Vector3.forward, axis)); } }
public static void DrawArrow(Vector3 start, Vector3 end, float headSize, int detail = 4) { Gizmos.DrawLine(start, end); var n = Vector3.Normalize(start - end) * headSize; var da = 360f / (float)detail; for (int i = 0; i < detail; i++) { var v = (VectorUtil.NearSameAxis(n, Vector3.up)) ? Vector3.Cross(n, Vector3.up) : Vector3.Cross(n, Vector3.right); var q = Quaternion.AngleAxis(da * i, n) * Quaternion.FromToRotation(n, n + v * 0.25f); Gizmos.DrawLine(end, end + q * n); } }