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; }
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; } } } } }
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; } } } } }