Example #1
0
        void Spawn(Vector3 position, Quaternion rotation, MeshInfo info)
        {
            GameObject go = Instantiate(prefab, position + offsetPosition, rotation) as GameObject;

            go.transform.eulerAngles += offsetRotation;
            go.transform.localScale   = scale;
            go.transform.parent       = transform;
            info.prefabInstance       = go.transform;
        }
Example #2
0
        public void ReGenerate()
        {
            ClearAll();

            if (type == GenerateType.GenerateOnPoint)
            {
                for (int i = 0; i < spline.spline.Length; i++)
                {
                    Quaternion rotation = Quaternion.identity;

                    if (UseLookAtRotation)
                    {
                        if (spline.spline.IsValid(i + 1))
                        {
                            rotation = Quaternion.LookRotation((spline.spline[i + 1].position - spline.spline[i].position).normalized);
                        }
                    }

                    MeshInfo mi = new MeshInfo(i);
                    Spawn(spline.spline[i].position, rotation, mi);
                    spawnedObjects.Add(mi);
                }
            }
            else if (type == GenerateType.GenerateByDistance)
            {
                float   dist = 0;
                Vector3 prev = spline.spline[0].position;

                for (int i = 0; i < spline.spline.Length; i++)
                {
                    if (!spline.spline.IsValid(i))
                    {
                        continue;
                    }

                    for (int s = 0; s < spline.spline[i].subways.Length; s++)
                    {
                        for (float f = 0.0f; f < 1; f += spline.spline[i].segments[s])
                        {
                            Vector3 next = spline.spline.GetPointAtTime(f, i, s);
                            dist += Vector3.Distance(prev, next);
                            if (dist >= distance)
                            {
                                Quaternion rotation = Quaternion.identity;
                                if (UseLookAtRotation)
                                {
                                    if (next != prev)
                                    {
                                        rotation = Quaternion.LookRotation((next - prev).normalized);
                                    }
                                }
                                MeshInfo mi = new MeshInfo(i, s, f);
                                Spawn(next, rotation, mi);
                                spawnedObjects.Add(mi);
                                dist = 0;
                            }
                            prev = next;
                        }
                    }
                }
            }
        }
Example #3
0
        public void ReGenerate()
        {
            ClearAll();

            if (type == GenerateType.GenerateOnPoint)
            {
                for (int i = 0; i < spline.spline.Length; i++)
                {
                    Quaternion rotation = Quaternion.identity;

                    if (UseLookAtRotation)
                    {
                        if (spline.spline.IsValid(i + 1))
                        {
                            rotation = Quaternion.LookRotation((spline.spline[i + 1].position - spline.spline[i].position).normalized);
                        }
                    }

                    MeshInfo mi = new MeshInfo(i);
                    Spawn(spline.spline[i].position, rotation, mi);
                    spawnedObjects.Add(mi);
                }
            }
            else if (type == GenerateType.GenerateByDistance)
            {
                float dist = 0;
                Vector3 prev = spline.spline[0].position;

                for (int i = 0; i < spline.spline.Length; i++)
                {
                    if (!spline.spline.IsValid(i)) continue;

                    for (int s = 0; s < spline.spline[i].subways.Length; s++)
                    {
                        for (float f = 0.0f; f < 1; f += spline.spline[i].segments[s])
                        {
                            Vector3 next = spline.spline.GetPointAtTime(f, i, s);
                            dist += Vector3.Distance(prev, next);
                            if (dist >= distance)
                            {
                                Quaternion rotation = Quaternion.identity;
                                if (UseLookAtRotation)
                                {
                                    if (next != prev) rotation = Quaternion.LookRotation((next - prev).normalized);
                                }
                                MeshInfo mi = new MeshInfo(i, s, f);
                                Spawn(next, rotation, mi);
                                spawnedObjects.Add(mi);
                                dist = 0;
                            }
                            prev = next;
                        }
                    }
                }
            }
        }
Example #4
0
 void Spawn(Vector3 position, Quaternion rotation, MeshInfo info)
 {
     GameObject go = Instantiate(prefab, position + offsetPosition, rotation) as GameObject;
     go.transform.eulerAngles += offsetRotation;
     go.transform.localScale = scale;
     go.transform.parent = transform;
     info.prefabInstance = go.transform;
 }