예제 #1
0
        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]);
            }
        }