Я пытаюсь создать игру Endless runner, в которой игрок остается неподвижным в начале координат осей, а плитки прокручиваются с фиксированной скоростью по оси 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;
}
}
`