예제 #1
0
    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++;
                }
            }
        }
    }
예제 #2
0
    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++;
                }
            }
        }
    }