Skip to content
Snippets Groups Projects
Commit 0d38e977 authored by Chang, Ryan's avatar Chang, Ryan
Browse files

Improve performance

parent 565cdf67
No related branches found
No related tags found
No related merge requests found
......@@ -162,6 +162,7 @@ MonoBehaviour:
samples: 513
terrainHeight: 600
currentGridPosition: {x: 0, y: 0}
bagCount: 0
--- !u!4 &40297593
Transform:
m_ObjectHideFlags: 0
......@@ -222,6 +223,7 @@ MonoBehaviour:
samples: 513
terrainHeight: 600
currentGridPosition: {x: 0, y: 0}
bagCount: 0
--- !u!4 &231393956
Transform:
m_ObjectHideFlags: 0
......@@ -400,8 +402,10 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
control: {fileID: 437356320}
speed: 10
speed: 1
currentMovement: {x: 0, y: 0, z: 0}
gravity: {x: 0, y: -9.81, z: 0}
gravityVelocity: {x: 0, y: 0, z: 0}
--- !u!114 &437356322
MonoBehaviour:
m_ObjectHideFlags: 0
......@@ -761,7 +765,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 2, z: -10}
m_LocalPosition: {x: 0, y: 3, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
......@@ -807,6 +811,7 @@ MonoBehaviour:
samples: 513
terrainHeight: 600
currentGridPosition: {x: 0, y: 0}
bagCount: 0
--- !u!4 &1129702283
Transform:
m_ObjectHideFlags: 0
......@@ -1025,6 +1030,7 @@ MonoBehaviour:
samples: 513
terrainHeight: 600
currentGridPosition: {x: 0, y: 0}
bagCount: 0
--- !u!1 &1312897309
GameObject:
m_ObjectHideFlags: 0
......@@ -1064,6 +1070,7 @@ MonoBehaviour:
samples: 513
terrainHeight: 600
currentGridPosition: {x: 0, y: 0}
bagCount: 0
--- !u!4 &1312897311
Transform:
m_ObjectHideFlags: 0
......@@ -1079,6 +1086,103 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1316988581
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1316988585}
- component: {fileID: 1316988584}
- component: {fileID: 1316988583}
- component: {fileID: 1316988582}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &1316988582
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1316988581}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &1316988583
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1316988581}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1316988584
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1316988581}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1316988585
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1316988581}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 923, z: 0}
m_LocalScale: {x: 2, y: 0.5, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 10
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1796874583
GameObject:
m_ObjectHideFlags: 0
......@@ -1143,6 +1247,7 @@ MonoBehaviour:
samples: 513
terrainHeight: 1800
currentGridPosition: {x: 0, y: 0}
bagCount: 0
--- !u!114 &1796874588
MonoBehaviour:
m_ObjectHideFlags: 0
......
......@@ -4,12 +4,20 @@ using UnityEngine.InputSystem;
public class PlayerControl : MonoBehaviour
{
[Header("User settings")]
public CharacterController control;
public float speed = 10;
[Header("Autogenerated values")]
public Vector3 currentMovement;
[Tooltip("Gravitational acceleration.")]
public Vector3 gravity = new(0, -9.81f, 0);
[Tooltip("Velocity of gravity.")]
public Vector3 gravityVelocity;
public void OnMove(InputAction.CallbackContext context)
{
Vector2 rawMove = context.ReadValue<Vector2>();
......@@ -23,6 +31,15 @@ public class PlayerControl : MonoBehaviour
private void FixedUpdate()
{
control.Move(currentMovement);
if (control.isGrounded)
{
gravityVelocity = Vector3.zero;
}
else
{
gravityVelocity += gravity * Time.deltaTime;
}
control.Move(currentMovement + gravityVelocity);
}
}
\ No newline at end of file
......@@ -48,12 +48,14 @@ public class TerrainGenerator : MonoBehaviour
[Tooltip("Dictionary of previously loaded terrains.")]
public Dictionary<Vector2Int, TerrainData> previouslyLoaded = new();
/// <summary>
/// Threads used for generating the neighboring and current terrains.
/// </summary>
private Thread[] generationThreads = new Thread[9];
///// <summary>
///// Threads used for generating the neighboring and current terrains.
///// </summary>
//private ConcurrentBag<Thread> threads = new();
private ConcurrentQueue<TerrainGenThread> generators = new();
private ConcurrentBag<TerrainGenThread> generators = new();
public int bagCount = 0;
/// <summary>
/// Apply the terrain that was generated by genThread.
......@@ -72,7 +74,7 @@ public class TerrainGenerator : MonoBehaviour
obj.transform.position += offset;
}
private void GenerateThread(Vector2 crawlPos, Vector2Int gridPos, ref Thread thread,
private void GenerateThread(Vector2 crawlPos, Vector2Int gridPos,
bool forceRefresh)
{
if (!previouslyLoaded.ContainsKey(gridPos) || forceRefresh)
......@@ -82,12 +84,10 @@ public class TerrainGenerator : MonoBehaviour
data.size.y / terrainHeight, data);
data.size = new(data.size.x, terrainHeight, data.size.z);
if (thread != null)
thread.Join();
generators.Add(genThread);
ThreadStart starter = new ThreadStart(genThread.Generate);
thread = new Thread(starter);
generators.Enqueue(genThread);
bagCount++;
ThreadStart starter = new(genThread.Generate);
Thread thread = new(starter);
previouslyLoaded[gridPos] = data;
thread.Start();
}
......@@ -102,7 +102,6 @@ public class TerrainGenerator : MonoBehaviour
{
GenerateThread(currentGridPosition + initCrawlPos + new Vector2(i, j),
currentGridPosition + new Vector2Int(i, j),
ref generationThreads[count],
forceRefresh);
count++;
}
......@@ -117,31 +116,37 @@ public class TerrainGenerator : MonoBehaviour
/// <returns></returns>
private IEnumerator CheckThreads()
{
yield return new WaitForEndOfFrame();
bool busy = true;
yield return new WaitForSecondsRealtime(1);
//bool busy = true;
//while (busy)
//{
// busy = false;
// foreach (var thread in generationThreads)
// {
// // Wait for all threads to finish.
// if (thread != null && thread.IsAlive)
// {
// busy = true;
// yield return new WaitForEndOfFrame();
// break;
// }
// }
//}
while (busy)
while (!generators.IsEmpty)
{
busy = false;
foreach (var thread in generationThreads)
if (generators.TryPeek(out TerrainGenThread tGen))
{
// Wait for all threads to finish.
if (thread != null && thread.IsAlive)
if (tGen.Ready)
{
busy = true;
yield return new WaitForEndOfFrame();
break;
generators.TryDequeue(out _);
ApplyGeneratedTerrain(tGen);
bagCount--;
}
}
}
while (!generators.IsEmpty)
{
if (generators.TryTake(out TerrainGenThread tGen))
{
ApplyGeneratedTerrain(tGen);
yield return new WaitForEndOfFrame();
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment