void OnDrawGizmos() { if (transform.childCount == 0) { return; } Gizmos.color = Color.red; int index = 0; const float radius = 0.2f; const int n = 50; // 頂点数 Bezier bezier = new Bezier(n); if (Application.isPlaying) { Gizmos.color = Color.blue; Gizmos.DrawSphere(controlPoints[index].position + transform.position, radius); while (index < controlPoints.Length - 1) { bezier.p0 = controlPoints[index + 0].position + transform.position; bezier.p1 = controlPoints[index + 0].nextHandle + transform.position; bezier.p2 = controlPoints[index + 1].prevHandle + transform.position; bezier.p3 = controlPoints[index + 1].position + transform.position; // ベジェ曲線による移動ルートを書く if (bezier.CheckBezier()) { Vector3[] bezierPositions = bezier.GetAllPoint(); Gizmos.color = Color.red; for (int i = 0; i < bezierPositions.Length - 1; i++) { Gizmos.DrawLine(bezierPositions[i], bezierPositions[i + 1]); } } else { // 直線による移動ルートを書く Gizmos.color = Color.red; Gizmos.DrawLine(bezier.p0, bezier.p3); } index++; } } else { Gizmos.color = Color.blue; Gizmos.DrawSphere(transform.GetChild(0).position, radius); while (index < transform.childCount - 1) { // ベジェ曲線による移動ルートを書く if (transform.GetChild(index + 0).GetComponent <CurveNode>() != null) { bezier.p0 = transform.GetChild(index + 0).position; bezier.p1 = transform.GetChild(index + 1).position; bezier.p2 = transform.GetChild(index + 2).position; bezier.p3 = transform.GetChild(index + 3).position; Vector3[] bezierPositions = bezier.GetAllPoint(); Gizmos.color = Color.red; for (int i = 0; i < bezierPositions.Length - 1; i++) { Gizmos.DrawLine(bezierPositions[i], bezierPositions[i + 1]); } Gizmos.color = Color.blue; Gizmos.DrawLine(bezier.p0, bezier.p1); Gizmos.DrawLine(bezier.p3, bezier.p2); index += 3; } else { Gizmos.color = Color.red; Gizmos.DrawLine(transform.GetChild(index + 0).position, transform.GetChild(index + 1).position); index++; } } } }
void OnDrawGizmos() { if (transform.childCount == 0) { return; } Gizmos.color = Color.red; int index = 0; const float radius = 0.2f; const int n = 50; // 頂点数 Bezier bezier = new Bezier(n); if (Application.isPlaying) { Gizmos.color = Color.blue; Gizmos.DrawSphere(controlPoints[index].position + transform.position, radius); while (index < controlPoints.Length - 1) { bezier.p0 = controlPoints[index + 0].position + transform.position; bezier.p1 = controlPoints[index + 0].nextHandle + transform.position; bezier.p2 = controlPoints[index + 1].prevHandle + transform.position; bezier.p3 = controlPoints[index + 1].position + transform.position; // ベジェ曲線による移動ルートを書く if (bezier.CheckBezier()) { Vector3[] bezierPositions = bezier.GetAllPoint(); Gizmos.color = Color.red; for (int i = 0; i < bezierPositions.Length - 1; i++) { Gizmos.DrawLine(bezierPositions[i], bezierPositions[i + 1]); } } else { // 直線による移動ルートを書く Gizmos.color = Color.red; Gizmos.DrawLine(bezier.p0, bezier.p3); } index++; } } else { Gizmos.color = Color.blue; Gizmos.DrawSphere(transform.GetChild(0).position, radius); while (index < transform.childCount - 1) { // ベジェ曲線による移動ルートを書く if (transform.GetChild(index + 0).GetComponent<CurveNode>() != null) { bezier.p0 = transform.GetChild(index + 0).position; bezier.p1 = transform.GetChild(index + 1).position; bezier.p2 = transform.GetChild(index + 2).position; bezier.p3 = transform.GetChild(index + 3).position; Vector3[] bezierPositions = bezier.GetAllPoint(); Gizmos.color = Color.red; for (int i = 0; i < bezierPositions.Length - 1; i++) { Gizmos.DrawLine(bezierPositions[i], bezierPositions[i + 1]); } Gizmos.color = Color.blue; Gizmos.DrawLine(bezier.p0, bezier.p1); Gizmos.DrawLine(bezier.p3, bezier.p2); index += 3; } else { Gizmos.color = Color.red; Gizmos.DrawLine(transform.GetChild(index + 0).position, transform.GetChild(index + 1).position); index++; } } } }