internal static void Draw() { GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools; if (bulkSetShader) { settings.setShaderGroupId = GEditorCommon.ActiveTerrainGroupPopupWithAllOption("Group Id", settings.setShaderGroupId); } else { settings.setShaderTerrain = EditorGUILayout.ObjectField("Terrain", settings.setShaderTerrain, typeof(GStylizedTerrain), true) as GStylizedTerrain; } GWizardEditorCommon.DrawMaterialSettingsGUI(); if (GUILayout.Button("Set")) { if (bulkSetShader) { GWizard.SetShader(settings.setShaderGroupId); } else { GWizard.SetShader(settings.setShaderTerrain); } } }
public static void SetShader(int groupId) { GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools; GCommon.ForEachTerrain(groupId, (t) => { SetShader(t, settings.lightingModel, settings.texturingModel, settings.splatsModel); }); }
public static GStylizedTerrain CreateTerrainFromSource(GTerrainData srcData) { GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools; GameObject g = new GameObject("Low Poly Terrain"); g.transform.localPosition = Vector3.zero; g.transform.localRotation = Quaternion.identity; g.transform.localScale = Vector3.one; GTerrainData terrainData = GTerrainData.CreateInstance <GTerrainData>(); terrainData.Reset(); #if UNITY_EDITOR string assetName = "TerrainData_" + terrainData.Id; GUtilities.EnsureDirectoryExists(settings.dataDirectory); AssetDatabase.CreateAsset(terrainData, Path.Combine(settings.dataDirectory, assetName + ".asset")); #endif srcData.CopyTo(terrainData); Material mat = null; if (srcData != null && srcData.Shading.CustomMaterial != null) { mat = UnityEngine.Object.Instantiate(srcData.Shading.CustomMaterial); } if (mat != null) { string matName = "TerrainMaterial_" + terrainData.Id; mat.name = matName; #if UNITY_EDITOR GUtilities.EnsureDirectoryExists(settings.dataDirectory); AssetDatabase.CreateAsset(mat, Path.Combine(settings.dataDirectory, matName + ".mat")); #endif terrainData.Shading.CustomMaterial = mat; } GStylizedTerrain terrain = g.AddComponent <GStylizedTerrain>(); terrain.GroupId = 0; terrain.TerrainData = terrainData; #if UNITY_EDITOR Undo.RegisterCreatedObjectUndo(g, "Creating Low Poly Terrain"); #endif GameObject colliderGO = new GameObject("Tree Collider"); colliderGO.transform.parent = terrain.transform; colliderGO.transform.localPosition = Vector3.zero; colliderGO.transform.localRotation = Quaternion.identity; colliderGO.transform.localScale = Vector3.one; GTreeCollider collider = colliderGO.AddComponent <GTreeCollider>(); collider.Terrain = terrain; #if UNITY_EDITOR Selection.activeGameObject = g; #endif return(terrain); }
public static void SetShader(GStylizedTerrain terrain) { GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools; SetShader(terrain, settings.lightingModel, settings.texturingModel, settings.splatsModel); }
public static List <GStylizedTerrain> CreateTerrains(GameObject root) { GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools; List <GStylizedTerrain> terrains = new List <GStylizedTerrain>(); #if UNITY_EDITOR if (!Application.isPlaying) { GUtilities.EnsureDirectoryExists(settings.dataDirectory); } #endif try { float totalTile = settings.tileCountX * settings.tileCountZ; float tileCount = 0; for (int z = 0; z < settings.tileCountZ; ++z) { for (int x = 0; x < settings.tileCountX; ++x) { tileCount += 1; #if UNITY_EDITOR GCommonGUI.CancelableProgressBar( "Creating Terrains", string.Format("Creating tile ({0},{1})", x, z), tileCount / totalTile); #endif GameObject g = new GameObject(); g.transform.parent = root.transform; g.transform.position = new Vector3(x * settings.tileSize.x, 0, z * settings.tileSize.z) + settings.origin; g.transform.rotation = Quaternion.identity; g.transform.localScale = Vector3.one; g.name = string.Format("{0}_({1},{2})", settings.terrainNamePrefix, x, z); GTerrainData data = ScriptableObject.CreateInstance <GTerrainData>(); if (Application.isPlaying) //Reset() only called in edit mode { data.Reset(); data.Geometry.Reset(); data.Shading.Reset(); data.Rendering.Reset(); data.Foliage.Reset(); data.Mask.Reset(); } data.name = string.Format("TerrainData_{0}", data.Id); data.Geometry.Width = settings.tileSize.x; data.Geometry.Height = settings.tileSize.y; data.Geometry.Length = settings.tileSize.z; if (settings.texturingModel == GTexturingModel.VertexColor) { data.Geometry.AlbedoToVertexColorMode = GAlbedoToVertexColorMode.Sharp; } #if UNITY_EDITOR if (!Application.isPlaying) { string dataAssetPath = Path.Combine(settings.dataDirectory, data.name + ".asset"); AssetDatabase.CreateAsset(data, dataAssetPath); } #endif Material material = GRuntimeSettings.Instance.terrainRendering.GetClonedMaterial( GCommon.CurrentRenderPipeline, settings.lightingModel, settings.texturingModel, settings.splatsModel); if (material != null) { material.name = string.Format("TerrainMaterial_{0}", data.Id); #if UNITY_EDITOR if (!Application.isPlaying) { string materialAssetPath = Path.Combine(settings.dataDirectory, material.name + ".mat"); AssetDatabase.CreateAsset(material, materialAssetPath); } #endif } data.Shading.CustomMaterial = material; data.Shading.UpdateMaterials(); GStylizedTerrain terrain = g.AddComponent <GStylizedTerrain>(); terrain.GroupId = settings.groupId; terrain.TerrainData = data; #if UNITY_EDITOR Undo.RegisterCreatedObjectUndo(g, "Creating Low Poly Terrain"); #endif GameObject colliderGO = new GameObject("Tree Collider"); colliderGO.transform.parent = g.transform; colliderGO.transform.localPosition = Vector3.zero; colliderGO.transform.localRotation = Quaternion.identity; colliderGO.transform.localScale = Vector3.one; GTreeCollider collider = colliderGO.AddComponent <GTreeCollider>(); collider.Terrain = terrain; } } } catch (GProgressCancelledException) { } GStylizedTerrain.ConnectAdjacentTiles(); #if UNITY_EDITOR GCommonGUI.ClearProgressBar(); #endif return(terrains); }
private static void DrawCreateTerrainsGUI() { string label = "1. Create Terrains"; string id = "wizard-create-terrains"; GEditorCommon.Foldout(label, true, id, () => { GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools; GEditorCommon.Header("Physical"); GUIContent originLabel = new GUIContent( "Origin", "Position of the first terrain in the grid."); settings.origin = GEditorCommon.InlineVector3Field(originLabel, settings.origin); GUIContent tileSizeLabel = new GUIContent( "Tile Size", "Size of each terrain tile in world space."); settings.tileSize = GEditorCommon.InlineVector3Field(tileSizeLabel, settings.tileSize); settings.tileSize = new Vector3( Mathf.Max(1, settings.tileSize.x), Mathf.Max(1, settings.tileSize.y), Mathf.Max(1, settings.tileSize.z)); GUIContent tileXLabel = new GUIContent( "Tile Count X", "Number of tiles along X-axis."); settings.tileCountX = EditorGUILayout.IntField(tileXLabel, settings.tileCountX); settings.tileCountX = Mathf.Max(1, settings.tileCountX); GUIContent tileZLabel = new GUIContent( "Tile Count Z", "Number of tiles along Z-axis."); settings.tileCountZ = EditorGUILayout.IntField(tileZLabel, settings.tileCountZ); settings.tileCountZ = Mathf.Max(1, settings.tileCountZ); GEditorCommon.Header("Material"); GWizardEditorCommon.DrawMaterialSettingsGUI(); GEditorCommon.Header("Utilities"); GUIContent namePrefixLabel = new GUIContent( "Name Prefix", "The beginning of each terrain's name. Useful for some level streaming system."); settings.terrainNamePrefix = EditorGUILayout.TextField(namePrefixLabel, settings.terrainNamePrefix); GUIContent groupIdLabel = new GUIContent( "Group Id", "An integer for grouping and connecting adjacent terrain tiles."); settings.groupId = EditorGUILayout.IntField(groupIdLabel, settings.groupId); GEditorCommon.Header("Data"); GUIContent directoryLabel = new GUIContent( "Directory", "Where to store created terrain data. A sub-folder of Assets/ is recommended."); string dir = settings.dataDirectory; GEditorCommon.BrowseFolder(directoryLabel, ref dir); if (string.IsNullOrEmpty(dir)) { dir = "Assets/"; } settings.dataDirectory = dir; if (GUILayout.Button("Create")) { GameObject environmentRoot = null; if (menuCmd != null && menuCmd.context != null) { environmentRoot = menuCmd.context as GameObject; } if (environmentRoot == null) { environmentRoot = new GameObject("Low Poly Environment"); environmentRoot.transform.position = settings.origin; } GWizard.CreateTerrains(environmentRoot); } }); }