如何在另一个移动瓦片的末端实例化一个瓦片?
How to instantiate a tile on the end of another moving tile?
我正在尝试创建一个“无尽的奔跑者”游戏,其中玩家在轴的原点上保持静止,而瓷砖在实例化时以固定速度在 Z 轴上滚动。
附加的脚本在开始时生成 5 个图块,同时已经以 GameManager 中设置的速度滚动,然后根据固定的生成速率继续生成图块。
我面临的问题是在实例化前五个图块之后计算图块之间的正确距离,以便图块的每一端重叠。
我附上了迄今为止在 TileManager 脚本中编写的内容,希望有人知道如何继续,或者可能知道其他方法。谢谢!
public class TileManager : MonoBehaviour
{
[SerializeField] private Transform player;
[SerializeField] private GameObject[] tilesArray;
[SerializeField] private int tilesToSpawn = 5;
[SerializeField] private float zPosSpawn = 0f;
[SerializeField] private float tileLength = 20f;
[SerializeField] private float scrollCoefficient;
private float timeSinceLastSpawned;
private float spawnRate;
void Start()
{
//scrollingObjectsSpeed = -1,5f
spawnRate = GameManager.Instance.scrollingObjectsSpeed * -1;
SpawnLogic();
}
void Update()
{
timeSinceLastSpawned += Time.deltaTime;
if (timeSinceLastSpawned >= spawnRate)
{
timeSinceLastSpawned = 0;
SpawnTiles(Random.Range(1, tilesArray.Length));
}
}
private void SpawnLogic()
{
for (int i = 0; i < tilesToSpawn; i++)
{
if (i == 0)
{
SpawnTiles(0);
}
else
{
SpawnTiles(Random.Range(0, tilesArray.Length));
}
}
}
private void SpawnTiles(int tileIndex)
{
scrollCoefficient = (GameManager.Instance.scrollingObjectsSpeed * -1f) * spawnRate ;
Instantiate(tilesArray[tileIndex], transform.forward * zPosSpawn, Quaternion.identity);
zPosSpawn = (zPosSpawn + tileLength) - scrollCoefficient;
}
}
`
我在之前的游戏中遇到过同样的问题,我会向您推荐解决此问题的最佳方法。
1
创建一个游戏对象列表来保存您的图块。
List<GameObject> tiles;
2
将您的图块保存在列表中
tiles.Add((GameObject)Instantiate(tilesArray[tileIndex], transform.forward * zPosSpawn, Quaternion.identity);
3
检查每个图块以查看其位置
for(int i = 0; i < tiles.Count; i++)
{
if(grids[i].transform.position.z <= lowerPosition)
{
DestroyObject(tiles[i]);
tiles.Add((GameObject)Instantiate(tilesArray[tileIndex], transform.forward * zPosSpawn, Quaternion.identity);
}
}
DestroyObject()只是一个简单的函数,不过记得去掉格子:
void DestroyObject(GameObject tile)
{
Destroy(grid);
tiles.remove(tile);
}
希望有用!
我正在尝试创建一个“无尽的奔跑者”游戏,其中玩家在轴的原点上保持静止,而瓷砖在实例化时以固定速度在 Z 轴上滚动。 附加的脚本在开始时生成 5 个图块,同时已经以 GameManager 中设置的速度滚动,然后根据固定的生成速率继续生成图块。
我面临的问题是在实例化前五个图块之后计算图块之间的正确距离,以便图块的每一端重叠。
我附上了迄今为止在 TileManager 脚本中编写的内容,希望有人知道如何继续,或者可能知道其他方法。谢谢!
public class TileManager : MonoBehaviour
{
[SerializeField] private Transform player;
[SerializeField] private GameObject[] tilesArray;
[SerializeField] private int tilesToSpawn = 5;
[SerializeField] private float zPosSpawn = 0f;
[SerializeField] private float tileLength = 20f;
[SerializeField] private float scrollCoefficient;
private float timeSinceLastSpawned;
private float spawnRate;
void Start()
{
//scrollingObjectsSpeed = -1,5f
spawnRate = GameManager.Instance.scrollingObjectsSpeed * -1;
SpawnLogic();
}
void Update()
{
timeSinceLastSpawned += Time.deltaTime;
if (timeSinceLastSpawned >= spawnRate)
{
timeSinceLastSpawned = 0;
SpawnTiles(Random.Range(1, tilesArray.Length));
}
}
private void SpawnLogic()
{
for (int i = 0; i < tilesToSpawn; i++)
{
if (i == 0)
{
SpawnTiles(0);
}
else
{
SpawnTiles(Random.Range(0, tilesArray.Length));
}
}
}
private void SpawnTiles(int tileIndex)
{
scrollCoefficient = (GameManager.Instance.scrollingObjectsSpeed * -1f) * spawnRate ;
Instantiate(tilesArray[tileIndex], transform.forward * zPosSpawn, Quaternion.identity);
zPosSpawn = (zPosSpawn + tileLength) - scrollCoefficient;
}
}
`
我在之前的游戏中遇到过同样的问题,我会向您推荐解决此问题的最佳方法。
1
创建一个游戏对象列表来保存您的图块。
List<GameObject> tiles;
2
将您的图块保存在列表中
tiles.Add((GameObject)Instantiate(tilesArray[tileIndex], transform.forward * zPosSpawn, Quaternion.identity);
3
检查每个图块以查看其位置
for(int i = 0; i < tiles.Count; i++)
{
if(grids[i].transform.position.z <= lowerPosition)
{
DestroyObject(tiles[i]);
tiles.Add((GameObject)Instantiate(tilesArray[tileIndex], transform.forward * zPosSpawn, Quaternion.identity);
}
}
DestroyObject()只是一个简单的函数,不过记得去掉格子:
void DestroyObject(GameObject tile)
{
Destroy(grid);
tiles.remove(tile);
}
希望有用!