Skip to content

Commit b5e7e66

Browse files
feat: fixed game ending for no reason
1 parent 984e634 commit b5e7e66

File tree

7 files changed

+245
-47
lines changed

7 files changed

+245
-47
lines changed

Assets/Scenes/Level5.unity

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ Transform:
247247
m_GameObject: {fileID: 107933163}
248248
serializedVersion: 2
249249
m_LocalRotation: {x: 0.20314598, y: -0.0010157359, z: 0.00021073695, w: 0.9791479}
250-
m_LocalPosition: {x: 0.01, y: 2.34, z: -1.2900002}
250+
m_LocalPosition: {x: 0.01, y: 2.35, z: -1.2900002}
251251
m_LocalScale: {x: 1, y: 1, z: 1}
252252
m_ConstrainProportionsScale: 0
253253
m_Children: []
@@ -419,6 +419,8 @@ MonoBehaviour:
419419
m_Name:
420420
m_EditorClassIdentifier: Assembly-CSharp::GroundSpawner
421421
groundTile: {fileID: 6370770336491763807, guid: 3ecaf7639e2e4ae428ca8acf71661bf2, type: 3}
422+
spawnAheadDistance: 50
423+
minTilesAhead: 5
422424
--- !u!4 &758042489
423425
Transform:
424426
m_ObjectHideFlags: 0
@@ -677,7 +679,7 @@ Transform:
677679
m_GameObject: {fileID: 1090058341}
678680
serializedVersion: 2
679681
m_LocalRotation: {x: 0.20314598, y: -0.001015736, z: 0.000210737, w: 0.9791479}
680-
m_LocalPosition: {x: 0.01, y: 2.34, z: -1.2900002}
682+
m_LocalPosition: {x: 0.01, y: 2.35, z: -1.2900002}
681683
m_LocalScale: {x: 1, y: 1, z: 1}
682684
m_ConstrainProportionsScale: 0
683685
m_Children: []
@@ -698,8 +700,7 @@ GameObject:
698700
- component: {fileID: 1106560889}
699701
- component: {fileID: 1106560885}
700702
- component: {fileID: 1106560896}
701-
- component: {fileID: 1106560897}
702-
- component: {fileID: 1106560898}
703+
- component: {fileID: 1106560899}
703704
m_Layer: 0
704705
m_Name: Player
705706
m_TagString: Player
@@ -832,7 +833,7 @@ Transform:
832833
m_GameObject: {fileID: 1106560884}
833834
serializedVersion: 2
834835
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
835-
m_LocalPosition: {x: 0, y: 0.25, z: 3.53}
836+
m_LocalPosition: {x: 0, y: 0.26, z: 3.53}
836837
m_LocalScale: {x: 1, y: 0.5, z: 1}
837838
m_ConstrainProportionsScale: 0
838839
m_Children: []
@@ -862,7 +863,7 @@ MonoBehaviour:
862863
sparkleDuration: 2
863864
sparkleColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
864865
sparkleSpread: 5
865-
--- !u!114 &1106560897
866+
--- !u!114 &1106560899
866867
MonoBehaviour:
867868
m_ObjectHideFlags: 0
868869
m_CorrespondingSourceObject: {fileID: 0}
@@ -871,32 +872,13 @@ MonoBehaviour:
871872
m_GameObject: {fileID: 1106560884}
872873
m_Enabled: 1
873874
m_EditorHideFlags: 0
874-
m_Script: {fileID: 11500000, guid: 4168b4524d119684ba3749f122056427, type: 3}
875+
m_Script: {fileID: 11500000, guid: f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6, type: 3}
875876
m_Name:
876-
m_EditorClassIdentifier: Assembly-CSharp::Mover
877+
m_EditorClassIdentifier: Assembly-CSharp::EndlessRunnerMover
877878
moveSpeed: 10
878-
dashSpeed: 30
879-
dashDuration: 0.2
880-
dashCooldown: 5
881-
postDashInvincibility: 1
882-
speedBoostIcon: {fileID: 0}
883-
shieldIcon: {fileID: 0}
884-
hinderIcon: {fileID: 0}
885-
powerupCountdownText: {fileID: 0}
886-
--- !u!114 &1106560898
887-
MonoBehaviour:
888-
m_ObjectHideFlags: 0
889-
m_CorrespondingSourceObject: {fileID: 0}
890-
m_PrefabInstance: {fileID: 0}
891-
m_PrefabAsset: {fileID: 0}
892-
m_GameObject: {fileID: 1106560884}
893-
m_Enabled: 1
894-
m_EditorHideFlags: 0
895-
m_Script: {fileID: 11500000, guid: 21200a1ebe2dad0428c2c535fe7328dc, type: 3}
896-
m_Name:
897-
m_EditorClassIdentifier: Assembly-CSharp::Scorer
898-
defaultLimit: 15
899-
collisionEffectPrefab: {fileID: 0}
879+
horizontalSpeed: 10
880+
useGravity: 1
881+
freezeRotation: 1
900882
--- !u!1 &1195171381
901883
GameObject:
902884
m_ObjectHideFlags: 0
@@ -986,6 +968,7 @@ MonoBehaviour:
986968
distanceFormat: 'Distance: {0:F1}m'
987969
player: {fileID: 1106560884}
988970
mover: {fileID: 0}
971+
endlessMover: {fileID: 0}
989972
--- !u!4 &1233100333
990973
Transform:
991974
m_ObjectHideFlags: 0

Assets/Scripts/EndlessRunTracker.cs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class EndlessRunTracker : MonoBehaviour
2323
[Header("Player Reference")]
2424
[SerializeField] private GameObject player;
2525
[SerializeField] private Mover mover;
26+
[SerializeField] private EndlessRunnerMover endlessMover;
2627

2728
private float gameStartTime;
2829
private float lastSpeedIncreaseTime;
@@ -59,12 +60,29 @@ private void InitializeTracker()
5960
}
6061
}
6162

62-
if (mover == null && player != null)
63+
if (endlessMover == null && player != null)
64+
{
65+
endlessMover = player.GetComponent<EndlessRunnerMover>();
66+
}
67+
68+
if (mover == null && player != null && endlessMover == null)
6369
{
6470
mover = player.GetComponent<Mover>();
6571
}
6672

67-
if (mover != null)
73+
if (endlessMover != null)
74+
{
75+
float baseSpeedValue = endlessMover.GetBaseSpeed();
76+
if (baseSpeedValue > 0.1f)
77+
{
78+
baseSpeed = baseSpeedValue;
79+
}
80+
else
81+
{
82+
baseSpeed = endlessMover.GetSpeed();
83+
}
84+
}
85+
else if (mover != null)
6886
{
6987
float baseSpeedValue = mover.GetBaseSpeed();
7088
if (baseSpeedValue > 0.1f)
@@ -99,9 +117,16 @@ private void Update()
99117
UpdateDistance();
100118
}
101119

102-
if (enableSpeedIncrease && mover != null)
120+
if (enableSpeedIncrease)
103121
{
104-
IncreaseSpeedOverTime();
122+
if (endlessMover != null)
123+
{
124+
IncreaseSpeedOverTime();
125+
}
126+
else if (mover != null)
127+
{
128+
IncreaseSpeedOverTime();
129+
}
105130
}
106131

107132
UpdateUI();
@@ -125,7 +150,11 @@ private void IncreaseSpeedOverTime()
125150
currentSpeedMultiplier += speedIncreaseRate;
126151
currentSpeedMultiplier = Mathf.Min(currentSpeedMultiplier, maxSpeedMultiplier);
127152

128-
if (mover != null)
153+
if (endlessMover != null)
154+
{
155+
endlessMover.SetSpeed(baseSpeed * currentSpeedMultiplier);
156+
}
157+
else if (mover != null)
129158
{
130159
mover.SetSpeed(baseSpeed * currentSpeedMultiplier);
131160
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
using UnityEngine;
2+
3+
[RequireComponent(typeof(Rigidbody))]
4+
public class EndlessRunnerMover : MonoBehaviour
5+
{
6+
[Header("Movement Settings")]
7+
[SerializeField] private float moveSpeed = 10f;
8+
[SerializeField] private float horizontalSpeed = 10f;
9+
10+
[Header("Physics Settings")]
11+
[SerializeField] private bool useGravity = true;
12+
[SerializeField] private bool freezeRotation = true;
13+
14+
private Rigidbody rb;
15+
private float baseMoveSpeed;
16+
private Vector3 movement;
17+
18+
void Start()
19+
{
20+
rb = GetComponent<Rigidbody>();
21+
if (rb == null)
22+
{
23+
Debug.LogError("[EndlessRunnerMover] Rigidbody component required!");
24+
return;
25+
}
26+
27+
baseMoveSpeed = moveSpeed;
28+
29+
rb.useGravity = useGravity;
30+
if (freezeRotation)
31+
{
32+
rb.freezeRotation = true;
33+
}
34+
35+
rb.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
36+
rb.isKinematic = false;
37+
38+
Collider col = GetComponent<Collider>();
39+
if (col != null && col.isTrigger)
40+
{
41+
col.isTrigger = false;
42+
Debug.LogWarning("[EndlessRunnerMover] Player collider was set as trigger. Changed to non-trigger for physics.");
43+
}
44+
}
45+
46+
void Update()
47+
{
48+
HandleInput();
49+
}
50+
51+
void FixedUpdate()
52+
{
53+
ApplyMovement();
54+
}
55+
56+
private void HandleInput()
57+
{
58+
float horizontal = Input.GetAxis("Horizontal");
59+
60+
movement = new Vector3(horizontal * horizontalSpeed, 0f, moveSpeed);
61+
}
62+
63+
private void ApplyMovement()
64+
{
65+
if (rb == null) return;
66+
67+
Vector3 newPosition = rb.position + movement * Time.fixedDeltaTime;
68+
rb.MovePosition(newPosition);
69+
}
70+
71+
public void SetSpeed(float newSpeed)
72+
{
73+
moveSpeed = newSpeed;
74+
movement.z = moveSpeed;
75+
}
76+
77+
public float GetSpeed()
78+
{
79+
return moveSpeed;
80+
}
81+
82+
public float GetBaseSpeed()
83+
{
84+
return baseMoveSpeed;
85+
}
86+
87+
public void ResetSpeed()
88+
{
89+
moveSpeed = baseMoveSpeed;
90+
movement.z = moveSpeed;
91+
}
92+
}
93+

Assets/Scripts/EndlessRunnerMover.cs.meta

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/GroundSpawner.cs

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,81 @@ public class GroundSpawner : MonoBehaviour
55
public GameObject groundTile;
66
Vector3 nextSpawnPoint;
77
int length = 25;
8-
public void GenerateTile()
9-
{
10-
GameObject newTile = Instantiate(groundTile, nextSpawnPoint, Quaternion.identity);
11-
nextSpawnPoint = newTile.transform.GetChild(0).position;
12-
}
8+
[SerializeField] private float spawnAheadDistance = 50f;
9+
[SerializeField] private int minTilesAhead = 5;
10+
11+
private GameObject player;
12+
private float lastCheckTime;
13+
private float checkInterval = 0.5f;
14+
1315
void Start()
1416
{
17+
if (groundTile == null)
18+
{
19+
Debug.LogError("[GroundSpawner] Ground Tile prefab not assigned!");
20+
return;
21+
}
22+
23+
if (nextSpawnPoint == Vector3.zero)
24+
{
25+
nextSpawnPoint = transform.position;
26+
}
27+
1528
for (int i = 0; i < length; i++)
1629
{
1730
GenerateTile();
1831
}
32+
33+
GameObject playerObj = GameObject.FindGameObjectWithTag("Player");
34+
if (playerObj != null)
35+
{
36+
player = playerObj;
37+
}
38+
39+
lastCheckTime = Time.time;
40+
41+
Debug.Log($"[GroundSpawner] Initialized. Next spawn point: {nextSpawnPoint}");
42+
}
43+
44+
void Update()
45+
{
46+
if (player == null || groundTile == null) return;
47+
48+
if (Time.time - lastCheckTime >= checkInterval)
49+
{
50+
CheckAndSpawnAhead();
51+
lastCheckTime = Time.time;
52+
}
53+
}
54+
55+
private void CheckAndSpawnAhead()
56+
{
57+
if (player == null || nextSpawnPoint == Vector3.zero) return;
58+
59+
float distanceToNextSpawn = Vector3.Distance(player.transform.position, nextSpawnPoint);
60+
61+
if (distanceToNextSpawn < spawnAheadDistance)
62+
{
63+
for (int i = 0; i < minTilesAhead; i++)
64+
{
65+
GenerateTile();
66+
}
67+
Debug.Log($"[GroundSpawner] Spawned {minTilesAhead} tiles ahead. Distance to next: {distanceToNextSpawn:F1}m");
68+
}
69+
}
70+
71+
public void GenerateTile()
72+
{
73+
if (groundTile == null) return;
74+
75+
GameObject newTile = Instantiate(groundTile, nextSpawnPoint, Quaternion.identity);
76+
if (newTile.transform.childCount > 0)
77+
{
78+
nextSpawnPoint = newTile.transform.GetChild(0).position;
79+
}
80+
else
81+
{
82+
nextSpawnPoint += Vector3.forward * 5f;
83+
}
1984
}
20-
2185
}

0 commit comments

Comments
 (0)