From 1a7f74ee764f74334f66228e34505fa21e5cdf42 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Tue, 9 May 2017 13:27:07 +0300 Subject: [PATCH 1/6] add "Add Collider" and "Add To Layer" properties to terrain factory --- .../Core/Unity/Editor/TerrainFactoryEditor.cs | 20 +++++++++++++++--- .../Factories/TerrainFactory.cs | 21 +++++++++++++------ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs b/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs index 0311a5408..23692835e 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs @@ -15,7 +15,10 @@ public SerializedProperty heightMod_Prop, customMapId_Prop, material_Prop, - mapId_Prop; + mapId_Prop, + collider_Prop, + addLayer_Prop, + layerId_Prop; private MonoScript script; void OnEnable() @@ -27,8 +30,10 @@ void OnEnable() heightMod_Prop = serializedObject.FindProperty("_heightModifier"); mapId_Prop = serializedObject.FindProperty("_mapId"); material_Prop = serializedObject.FindProperty("_baseMaterial"); - - customMapId_Prop = serializedObject.FindProperty("_customMapId"); + collider_Prop = serializedObject.FindProperty("_addMeshCollider"); + addLayer_Prop = serializedObject.FindProperty("_addToLayer"); + addLayer_Prop = serializedObject.FindProperty("_addToLayer"); + layerId_Prop = serializedObject.FindProperty("_layerId"); script = MonoScript.FromScriptableObject((TerrainFactory)target); } @@ -98,6 +103,15 @@ public override void OnInspectorGUI() EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(material_Prop, new GUIContent("Material")); + EditorGUILayout.Space(); + collider_Prop.boolValue = EditorGUILayout.Toggle("Add Mesh Collider", collider_Prop.boolValue); + EditorGUILayout.Space(); + addLayer_Prop.boolValue = EditorGUILayout.Toggle("Add To Layer", addLayer_Prop.boolValue); + if (addLayer_Prop.boolValue) + { + layerId_Prop.intValue = EditorGUILayout.LayerField("Layer", layerId_Prop.intValue); + } + if (GUILayout.Button("Update")) { _factory.Update(); diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs index a6dae00f0..53e6e97e5 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs @@ -43,6 +43,12 @@ public class TerrainFactory : Factory private float _heightModifier = 1f; [SerializeField] private int _sampleCount = 40; + [SerializeField] + private bool _addMeshCollider = false; + [SerializeField] + private bool _addToLayer = false; + [SerializeField] + private int _layerId = 0; private Dictionary _tiles; private Vector2 _stitchTarget; @@ -214,9 +220,11 @@ private void GenerateTerrainMesh(UnityTile tile, float heightMultiplier) if (tile.MeshRenderer.material == null) tile.MeshRenderer.material = _baseMaterial; - //BRNKHY Optional stuff - //go.AddComponent(); - //go.layer = LayerMask.NameToLayer("terrain"); + + if (_addMeshCollider) + go.AddComponent(); + if (_addToLayer) + go.layer = _layerId; } /// @@ -250,9 +258,10 @@ private void CreateFlatMesh(UnityTile tile) if (tile.MeshRenderer.material == null) tile.MeshRenderer.material = _baseMaterial; - //BRNKHY Optional stuff - //go.AddComponent(); - //go.layer = LayerMask.NameToLayer("terrain"); + if (_addMeshCollider) + tile.gameObject.AddComponent(); + if (_addToLayer) + tile.gameObject.layer = _layerId; } /// From 8a136537d2ffa69884a32330d463f70944956308 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Tue, 9 May 2017 19:34:00 +0300 Subject: [PATCH 2/6] change flat mesh to use box collider fix if clause syntax --- .../Unity/MeshGeneration/Factories/TerrainFactory.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs index 53e6e97e5..1244f24d4 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs @@ -222,9 +222,13 @@ private void GenerateTerrainMesh(UnityTile tile, float heightMultiplier) tile.MeshRenderer.material = _baseMaterial; if (_addMeshCollider) + { go.AddComponent(); + } if (_addToLayer) + { go.layer = _layerId; + } } /// @@ -259,9 +263,13 @@ private void CreateFlatMesh(UnityTile tile) tile.MeshRenderer.material = _baseMaterial; if (_addMeshCollider) - tile.gameObject.AddComponent(); + { + var bc = tile.gameObject.AddComponent(); + } if (_addToLayer) + { tile.gameObject.layer = _layerId; + } } /// From d25fab30c709ef49e295d23c36642b8abd6978e7 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Tue, 9 May 2017 19:59:19 +0300 Subject: [PATCH 3/6] change map image factory texture settings to clamp instead of repeat wrapping mpde --- .../Core/Unity/MeshGeneration/Factories/MapImageFactory.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs index 0965f39c3..2ba609448 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs @@ -101,6 +101,7 @@ private void Run(UnityTile tile) var rend = tile.GetComponent(); rend.material = _baseMaterial; tile.ImageData = new Texture2D(0, 0, _textureFormat, _useMipMap); + tile.ImageData.wrapMode = TextureWrapMode.Clamp; tile.ImageData.LoadImage(rasterTile.Data); rend.material.mainTexture = tile.ImageData; tile.ImageDataState = TilePropertyState.Loaded; From 19e3416f34a7c15e80167b26f08f747ba2d317ca Mon Sep 17 00:00:00 2001 From: brnkhy Date: Tue, 9 May 2017 20:20:44 +0300 Subject: [PATCH 4/6] introduce layer modifier to change layers of game objects created by mesh factory --- .../Core/Unity/Editor/LayerModifierEditor.cs | 32 +++++++++++++++++++ .../Unity/Editor/LayerModifierEditor.cs.meta | 12 +++++++ .../Core/Unity/Editor/TerrainFactoryEditor.cs | 1 - .../GameObjectModifiers/LayerModifier.cs | 21 ++++++++++++ .../GameObjectModifiers/LayerModifier.cs.meta | 12 +++++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs create mode 100644 sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs.meta create mode 100644 sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs create mode 100644 sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs.meta diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs b/sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs new file mode 100644 index 000000000..52185ba3f --- /dev/null +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using System.Collections; +using UnityEditor; +using Mapbox.Unity.MeshGeneration.Factories; +using Mapbox.Unity.MeshGeneration.Modifiers; + +[CustomEditor(typeof(LayerModifier))] +public class LayerModifierEditor : Editor +{ + public SerializedProperty layerId_Prop; + private MonoScript script; + + void OnEnable() + { + layerId_Prop = serializedObject.FindProperty("_layerId"); + + script = MonoScript.FromScriptableObject((LayerModifier)target); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + GUI.enabled = false; + script = EditorGUILayout.ObjectField("Script", script, typeof(MonoScript), false) as MonoScript; + GUI.enabled = true; + + layerId_Prop.intValue = EditorGUILayout.LayerField("Layer", layerId_Prop.intValue); + + serializedObject.ApplyModifiedProperties(); + } +} diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs.meta b/sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs.meta new file mode 100644 index 000000000..b52cadfef --- /dev/null +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/LayerModifierEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ae3383f13b58e544ba5c12293fff5957 +timeCreated: 1494349684 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs b/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs index 23692835e..925afc833 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs @@ -32,7 +32,6 @@ void OnEnable() material_Prop = serializedObject.FindProperty("_baseMaterial"); collider_Prop = serializedObject.FindProperty("_addMeshCollider"); addLayer_Prop = serializedObject.FindProperty("_addToLayer"); - addLayer_Prop = serializedObject.FindProperty("_addToLayer"); layerId_Prop = serializedObject.FindProperty("_layerId"); script = MonoScript.FromScriptableObject((TerrainFactory)target); diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs new file mode 100644 index 000000000..5426b7adc --- /dev/null +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs @@ -0,0 +1,21 @@ +namespace Mapbox.Unity.MeshGeneration.Modifiers +{ + using UnityEngine; + using Mapbox.Unity.MeshGeneration.Components; + + /// + /// Texture Modifier is a basic modifier which simply adds a TextureSelector script to the features. + /// Logic is all pushed into this TextureSelector mono behaviour to make it's easier to change it in runtime. + /// + [CreateAssetMenu(menuName = "Mapbox/Modifiers/Layer Modifier")] + public class LayerModifier : GameObjectModifier + { + [SerializeField] + private int _layerId; + + public override void Run(FeatureBehaviour fb) + { + fb.gameObject.layer = _layerId; + } + } +} diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs.meta b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs.meta new file mode 100644 index 000000000..d50795358 --- /dev/null +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4644f4fa4408d144a9c7927401f3807 +timeCreated: 1494349551 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 5b2a6326a739a2bb3ed6ed798fe7bd9678f2b2ef Mon Sep 17 00:00:00 2001 From: brnkhy Date: Tue, 9 May 2017 20:30:11 +0300 Subject: [PATCH 5/6] add collider modifier for mesh factory --- .../GameObjectModifiers/ColliderModifier.cs | 40 +++++++++++++++++++ .../ColliderModifier.cs.meta | 12 ++++++ .../GameObjectModifiers/LayerModifier.cs | 6 +-- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs create mode 100644 sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs.meta diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs new file mode 100644 index 000000000..8451ccc16 --- /dev/null +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs @@ -0,0 +1,40 @@ +namespace Mapbox.Unity.MeshGeneration.Modifiers +{ + using UnityEngine; + using Mapbox.Unity.MeshGeneration.Components; + + [CreateAssetMenu(menuName = "Mapbox/Modifiers/Collider Modifier")] + public class ColliderModifier : GameObjectModifier + { + [SerializeField] + private ColliderType _colliderType; + + public override void Run(FeatureBehaviour fb) + { + switch (_colliderType) + { + case ColliderType.BoxCollider: + fb.gameObject.AddComponent(); + break; + case ColliderType.MeshCollider: + fb.gameObject.AddComponent(); + break; + case ColliderType.SphereCollider: + fb.gameObject.AddComponent(); + break; + default: + break; + } + } + + + public enum ColliderType + { + None, + BoxCollider, + MeshCollider, + SphereCollider + } + + } +} diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs.meta b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs.meta new file mode 100644 index 000000000..542e3e0c0 --- /dev/null +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/ColliderModifier.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 288d05a2dbabb0f46a5fa6c85102780a +timeCreated: 1494350918 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs index 5426b7adc..3d0e8e882 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/GameObjectModifiers/LayerModifier.cs @@ -2,11 +2,9 @@ namespace Mapbox.Unity.MeshGeneration.Modifiers { using UnityEngine; using Mapbox.Unity.MeshGeneration.Components; + + - /// - /// Texture Modifier is a basic modifier which simply adds a TextureSelector script to the features. - /// Logic is all pushed into this TextureSelector mono behaviour to make it's easier to change it in runtime. - /// [CreateAssetMenu(menuName = "Mapbox/Modifiers/Layer Modifier")] public class LayerModifier : GameObjectModifier { From 5e0ce8b8f7a044d55ec72e648ec7a8c8c7d7d56e Mon Sep 17 00:00:00 2001 From: David Rhodes Date: Tue, 9 May 2017 14:17:07 -0600 Subject: [PATCH 6/6] Fixing error handling from response. Changing mesh collider to just collider. Adding custom map id property for editor. --- .../Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs | 5 +++-- .../Core/Unity/MeshGeneration/Factories/TerrainFactory.cs | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs b/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs index 925afc833..2e98a3aa9 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/TerrainFactoryEditor.cs @@ -29,8 +29,9 @@ void OnEnable() sampleCount_Prop = serializedObject.FindProperty("_sampleCount"); heightMod_Prop = serializedObject.FindProperty("_heightModifier"); mapId_Prop = serializedObject.FindProperty("_mapId"); + customMapId_Prop = serializedObject.FindProperty("_customMapId"); material_Prop = serializedObject.FindProperty("_baseMaterial"); - collider_Prop = serializedObject.FindProperty("_addMeshCollider"); + collider_Prop = serializedObject.FindProperty("_addCollider"); addLayer_Prop = serializedObject.FindProperty("_addToLayer"); layerId_Prop = serializedObject.FindProperty("_layerId"); @@ -103,7 +104,7 @@ public override void OnInspectorGUI() EditorGUILayout.PropertyField(material_Prop, new GUIContent("Material")); EditorGUILayout.Space(); - collider_Prop.boolValue = EditorGUILayout.Toggle("Add Mesh Collider", collider_Prop.boolValue); + collider_Prop.boolValue = EditorGUILayout.Toggle("Add Collider", collider_Prop.boolValue); EditorGUILayout.Space(); addLayer_Prop.boolValue = EditorGUILayout.Toggle("Add To Layer", addLayer_Prop.boolValue); if (addLayer_Prop.boolValue) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs index 1244f24d4..bc286cc2f 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs @@ -44,7 +44,7 @@ public class TerrainFactory : Factory [SerializeField] private int _sampleCount = 40; [SerializeField] - private bool _addMeshCollider = false; + private bool _addCollider = false; [SerializeField] private bool _addToLayer = false; [SerializeField] @@ -118,7 +118,7 @@ private void CreateTerrainHeight(UnityTile tile, float heightMultiplier = 1) var pngRasterTile = new RawPngRasterTile(); pngRasterTile.Initialize(parameters, () => { - if (pngRasterTile.Error != null) + if (pngRasterTile.HasError) { tile.HeightDataState = TilePropertyState.Error; return; @@ -221,7 +221,7 @@ private void GenerateTerrainMesh(UnityTile tile, float heightMultiplier) if (tile.MeshRenderer.material == null) tile.MeshRenderer.material = _baseMaterial; - if (_addMeshCollider) + if (_addCollider) { go.AddComponent(); } @@ -262,7 +262,7 @@ private void CreateFlatMesh(UnityTile tile) if (tile.MeshRenderer.material == null) tile.MeshRenderer.material = _baseMaterial; - if (_addMeshCollider) + if (_addCollider) { var bc = tile.gameObject.AddComponent(); }