Ejemplo n.º 1
0
 Vector3 EvaluteAt(float t, CatmullRomSpline3D spline, int p)
 {
     if (t > p)
     {
         t -= p;
     }
     return(spline.Sample(t));
 }
Ejemplo n.º 2
0
 void Start()
 {
     spline = new CatmullRomSpline3D();
     Vector3[] cps = new Vector3[6];
     cps[0] = new Vector3(-75, 30, -75);
     cps[1] = new Vector3(0, 60, 75);
     cps[2] = new Vector3(75, 30, -75);
     cps[3] = cps[0];
     cps[4] = cps[1];
     cps[5] = cps[2];
     spline.ControlPoints = cps;
     currentTime          = 0;
 }
Ejemplo n.º 3
0
    public void moveTowardRedBoid(GameObject boid)
    {
        Vector3[]          cps;
        CatmullRomSpline3D Spline;

        cps    = new Vector3[4];
        cps[0] = -2 * (boid.transform.forward) + boid.transform.position;
        cps[1] = boid.transform.position;
        cps[2] = cloneObject.transform.position + new Vector3(Random.Range(-5f, 5f), Random.Range(-5f, 5f), Random.Range(-5f, 5f)) - cloneObject.transform.forward;
        cps[3] = cloneObject.transform.forward + cloneObject.transform.position;
        Spline = new CatmullRomSpline3D();
        Spline.ControlPoints = cps;

        Vector3 currPos = EvaluteAt(speed, Spline, cps.Length);

        foreach (GameObject obj in objectList)
        {
            if (obj != boid)
            {
                if (Vector3.SqrMagnitude(currPos - obj.transform.position) < 10f * 10f)
                {
                    currPos = (currPos - obj.transform.position).normalized * 10f + obj.transform.position;
                }
            }
        }
        Vector3 nextPos = EvaluteAt(speed + speed, Spline, cps.Length);

        boid.transform.position = currPos;
        Vector3 forward = nextPos - currPos;

        if (forward.sqrMagnitude > 1e-5)
        {
            forward.Normalize();
            boid.transform.forward = forward;
        }
    }