private void WriteObjectsToTerrain(TerrainWrapper wrapper, Bounds bounds) { bounds.Expand(Vector3.up * 5000); var tPos = wrapper.transform.position; var tSize = wrapper.Terrain.terrainData.size; for (var i = 0; i < Objects.Count; i++) { var prefabObjectData = Objects[i]; if (prefabObjectData.Prefab == null) { continue; } var worldPos = tPos + new Vector3(prefabObjectData.Position.x * tSize.x, 0, prefabObjectData.Position.z * tSize.z); worldPos.y = wrapper.transform.position.y + prefabObjectData.Position.y; if (!bounds.Contains(worldPos)) { DebugHelper.DrawPoint(worldPos, 20, Color.red, 20); continue; } if (wrapper.CompoundTerrainData.Objects.ContainsKey(prefabObjectData.Guid)) { Debug.LogWarning("Duplicate object entry found: " + prefabObjectData.Guid); continue; } wrapper.CompoundTerrainData.Objects.Add(prefabObjectData.Guid, new InstantiatedObjectData(prefabObjectData, this, null)); } for (var i = 0; i < ObjectRemovals.Count; i++) { wrapper.CompoundTerrainData.Objects.Remove(ObjectRemovals[i]); } }