added: basic world generation
This commit is contained in:
1937
Assets/Scenes/WordlGeneration.unity
Normal file
1937
Assets/Scenes/WordlGeneration.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Scenes/WordlGeneration.unity.meta
Normal file
7
Assets/Scenes/WordlGeneration.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 59b93f2adad13734a8942e8d5a1ad672
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Scripts/World.meta
Normal file
8
Assets/Scripts/World.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 09610894297ae74449b37191945069ff
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
116
Assets/Scripts/World/WorldGenerator.cs
Normal file
116
Assets/Scripts/World/WorldGenerator.cs
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using Sirenix.OdinInspector;
|
||||||
|
using UnityEngine.ProBuilder;
|
||||||
|
using UnityEngine.ProBuilder.MeshOperations;
|
||||||
|
using Random = UnityEngine.Random;
|
||||||
|
|
||||||
|
public class WorldGenerator : MonoBehaviour{
|
||||||
|
public Vector2 worldSize;
|
||||||
|
|
||||||
|
public int platformCount;
|
||||||
|
|
||||||
|
[MinMaxSlider(1f, 100f)]
|
||||||
|
public Vector2 platformHeightRange;
|
||||||
|
[MinMaxSlider(25f, 300f)]
|
||||||
|
public Vector2 platformWidthRange;
|
||||||
|
|
||||||
|
[Header("Mega Platforms")]
|
||||||
|
public int megaPlatformCount;
|
||||||
|
[MinMaxSlider(30f, 100f)]
|
||||||
|
public Vector2 megaPlatformtHeightRange = new Vector2(20, 20);
|
||||||
|
[MinMaxSlider(250f, 500f)]
|
||||||
|
public Vector2 megaPlatformWidthRange = new Vector2(50, 50);
|
||||||
|
|
||||||
|
private List<GameObject> allPlatforms = new List<GameObject>();
|
||||||
|
private List<GameObject> megaPlatforms = new List<GameObject>();
|
||||||
|
|
||||||
|
void Start(){
|
||||||
|
GenerateWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Button]
|
||||||
|
public void RegenerateWorld(){
|
||||||
|
ClearWorld();
|
||||||
|
GenerateWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearWorld(){
|
||||||
|
allPlatforms.ForEach(Destroy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenerateWorld(){
|
||||||
|
GenerateMegaPlatforms();
|
||||||
|
GenerateStandardPlatforms();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenerateMegaPlatforms(){
|
||||||
|
for (int i = 0; i < megaPlatformCount; i++) {
|
||||||
|
Vector3 newPlatformSize = new Vector3(
|
||||||
|
Random.Range(megaPlatformWidthRange.x, megaPlatformWidthRange.y),
|
||||||
|
Random.Range(megaPlatformtHeightRange.x, megaPlatformtHeightRange.y),
|
||||||
|
Random.Range(megaPlatformWidthRange.x, megaPlatformWidthRange.y)
|
||||||
|
);
|
||||||
|
|
||||||
|
var newPlatform = ShapeGenerator.GenerateCube(PivotLocation.Center, newPlatformSize);
|
||||||
|
|
||||||
|
newPlatform.SetMaterial(newPlatform.faces, BuiltinMaterials.defaultMaterial);
|
||||||
|
newPlatform.gameObject.AddComponent<BoxCollider>();
|
||||||
|
|
||||||
|
newPlatform.transform.position = new Vector3(
|
||||||
|
Random.Range(-worldSize.x, worldSize.x),
|
||||||
|
newPlatformSize.y / 2f,
|
||||||
|
Random.Range(-worldSize.y, worldSize.y)
|
||||||
|
);
|
||||||
|
|
||||||
|
newPlatform.gameObject.name = "Megaplatform";
|
||||||
|
|
||||||
|
megaPlatforms.Add(newPlatform.gameObject);
|
||||||
|
allPlatforms.Add(newPlatform.gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenerateStandardPlatforms(){
|
||||||
|
for (int i = 0; i < platformCount; i++) {
|
||||||
|
Vector3 newPlatformSize = new Vector3(
|
||||||
|
Random.Range(platformWidthRange.x, platformWidthRange.y),
|
||||||
|
Random.Range(platformHeightRange.x, platformHeightRange.y),
|
||||||
|
Random.Range(platformWidthRange.x, platformWidthRange.y)
|
||||||
|
);
|
||||||
|
|
||||||
|
var newPlatform = ShapeGenerator.GenerateCube(PivotLocation.Center, newPlatformSize);
|
||||||
|
newPlatform.gameObject.layer = 2;
|
||||||
|
|
||||||
|
newPlatform.SetMaterial(newPlatform.faces, BuiltinMaterials.defaultMaterial);
|
||||||
|
|
||||||
|
Vector3 newPlatformPosXZ = new Vector3(
|
||||||
|
Random.Range(-worldSize.x, worldSize.x),
|
||||||
|
350f,
|
||||||
|
Random.Range(-worldSize.y, worldSize.y)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
Physics.Raycast(newPlatformPosXZ, Vector3.down, out RaycastHit hit, Mathf.Infinity, LayerMask.GetMask("Default"));
|
||||||
|
|
||||||
|
Debug.Log(hit.collider.name);
|
||||||
|
|
||||||
|
newPlatform.transform.position = new Vector3(
|
||||||
|
newPlatformPosXZ.x,
|
||||||
|
hit.point.y + newPlatformSize.y /2f,
|
||||||
|
newPlatformPosXZ.z
|
||||||
|
);
|
||||||
|
|
||||||
|
newPlatform.gameObject.name = "Platform";
|
||||||
|
|
||||||
|
// newPlatform.gameObject.AddComponent<BoxCollider>();
|
||||||
|
allPlatforms.Add(newPlatform.gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/World/WorldGenerator.cs.meta
Normal file
2
Assets/Scripts/World/WorldGenerator.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f48f68f001ea2ca4b89207ff5b4960a9
|
||||||
Reference in New Issue
Block a user