Hallöchen, ich schon wieder
undzwar hab ich ein kleines Problem auf das ich einfach keine Lösung finde. Ich erstelle hier per Script eine Art "EndlessRunner". Hierbei sollen, wenn der Spieler über eine gewisse Schwelle geht 2 Tiles entstehen und die ersten beiden(also die, die Chronologisch zu erst erstellt wurden) gelöscht werden. Wenn ich das ganze mit nur einer "linie" mache, Funktioniert es einwandfrei. Sobald ich aber die 2.Linie hinzu füge, verhält es sich ganz eigenartig. Es löscht anfangs zu schnell und nach ner gewissen Zeit holt der Spieler wieder auf und ist auf der Linie, und wenn es wieder etwas Länger geht, dann ist der Spieler vor der Linie. Ich habe es schon versucht in 2 Lists zu Speichern. Also die Linke linie in eine List und die Rechte in eine, aber dann passiert mehr als Magie und es entsteht nurnoch eine Linie. Anbei der Code, vllt gibt es irgend einen anderen Lösungsansatz?
Vielen Dank
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class GenerationScript : MonoBehaviour {
public GameObject[] blocks;
private float spawnZ = 1.0f;
private float blockLenght = 1.0f;
private int showBlocksMax = 35;
private Transform playerTransform;
private float safeZone = 13.0f;
private List<GameObject> activeTiles;
void Start () {
activeTiles = new List<GameObject>();
playerTransform = GameObject.FindGameObjectWithTag ("Player").transform;
for(int i = 0; i <showBlocksMax; i++)
{
SpawnBlock(1);
}
}
// Update is called once per frame
void Update () {
if(playerTransform.position.z -safeZone > (spawnZ - showBlocksMax * blockLenght))
{
SelectBlock();
DeleteTile();
}
}
private void SpawnBlock(int prefabIndex = -1)
{
GameObject go;
go = Instantiate(blocks[prefabIndex]) as GameObject;
go.transform.SetParent(transform);
go.transform.position = Vector3.forward * spawnZ;
spawnZ += blockLenght;
activeTiles.Add(go);
}
private void DeleteTile()
{
Destroy(activeTiles[0]);
activeTiles.RemoveAt(0);
}
private int RandomPrefabIndex()
{
if (blocks.Length <= 1)
{
return 0;
}
else return 1;
}
public void SelectBlock()
{
GameObject go;
GameObject go1;
int select = Random.Range(0, 2);
if(select == 0)
{
go = Instantiate(blocks[0]) as GameObject;
go.transform.SetParent(transform);
go.transform.position = Vector3.forward * spawnZ;
activeTiles.Add(go);
go1 = Instantiate(blocks[Random.Range(1, 6)]) as GameObject;
go1.transform.SetParent(transform);
go1.transform.position = new Vector3(1, 0, spawnZ);
activeTiles.Add(go1);
spawnZ += blockLenght;
}
else
{
go = Instantiate(blocks[Random.Range(1, 6)]) as GameObject;
go.transform.SetParent(transform);
go.transform.position = Vector3.forward * spawnZ;
activeTiles.Add(go);
int select2 = Random.Range(0, 2);
if(select2 == 0)
{
go1 = Instantiate(blocks[0]) as GameObject;
go1.transform.SetParent(transform);
go1.transform.position = new Vector3(1, 0, spawnZ);
activeTiles.Add(go1);
}
else
{
go1 = Instantiate(blocks[Random.Range(1, 6)]) as GameObject;
go1.transform.SetParent(transform);
go1.transform.position = new Vector3(1, 0, spawnZ);
activeTiles.Add(go1);
}
}
}
}
|