#unity3d #instantiation #objectinstantiation #racing
#unity3d #создание экземпляров #objectinstantiation #Гонки
Вопрос:
Привет, ребята из StackOverflow,
Я работаю над игрой, которая будет использовать какую-то систему объединения объектов / создания экземпляров. Моя цель — создать бесконечный трек с моими сборными конструкторами на первом изображении ниже. Я хочу каждый раз выбирать случайный сборный материал и соединять его с моим текущим треком с правильным положением и вращением. Похоже, что на втором изображении, где я вручную отрегулировал положения и повороты своих сборных элементов (я создал свои сборные элементы в blender размером 60 единиц по вертикали или горизонтали, что означает, что мои позиции кратны 30).
Довольно легко создавать экземпляры прямых объектов на неопределенный срок, но я понятия не имею, как каждый раз включать разное вращение и положение, что сделает мою гоночную трассу завершенной. Вот мой простой скрипт для создания экземпляров прямых префабов на неопределенный срок. Что я должен включить в метод SpawnTiles(), чтобы достичь того, чего я хочу. Ответ не обязательно должен быть конкретным. Я могу использовать некоторые идеи, открывающие разум.
Заранее благодарю за вашу помощь.
public GameObject[] tilePrefabs;
private Transform playerTransform;
private float spawnZ = 35.5f;
private float tileLength = 60.0f;
private float safeZone = 60;
private int lastPrefabIndex = 0;
private int amountTilesOnScreen = 3;
private List<GameObject> activeTiles;
void Start()
{
activeTiles = new List<GameObject>();
playerTransform = GameObject.FindGameObjectWithTag("Cars").transform;
for (int i = 0; i < amountTilesOnScreen; i )
{
SpawnTiles();
}
}
void Update()
{
if (playerTransform.position.z - safeZone > (spawnZ - amountTilesOnScreen * tileLength))
{
SpawnTiles();
DeleteTile();
}
}
private void SpawnTiles(int prefabIndex = -1)
{
GameObject go = Instantiate(tilePrefabs[RandomPrefabIndex()]) as GameObject;
go.transform.SetParent(transform);
go.transform.position = Vector3.forward * spawnZ;
spawnZ = tileLength;
activeTiles.Add(go);
}
private void DeleteTile()
{
Destroy(activeTiles[0]);
activeTiles.RemoveAt(0);
}
private int RandomPrefabIndex()
{
if (tilePrefabs.Length <= 1)
{
return 0;
}
int randomIndex = lastPrefabIndex;
while (randomIndex == lastPrefabIndex)
{
randomIndex = Random.Range(0, tilePrefabs.Length);
}
lastPrefabIndex = randomIndex;
return randomIndex;
}
Комментарии:
1. Эй, я знаю, откуда у тебя этот код / логика. Хотя и потрясающий урок, но вы не можете достичь желаемого с помощью этой логики. У одного и того же человека разные руководства по кривым путям, как у subway surfer. Пожалуйста, посмотрите и на это.
Ответ №1:
Итак, в основном, для того, чтобы это было идеально выровнено, вы должны знать конечную точку первого элемента дороги и начальную точку второго элемента дороги, который вы будете размещать.
Итак, почему бы не создать 2 пустых игровых объекта в качестве начальной и конечной точки каждого блока и сохранить их как свойство элемента road, а затем выровнять начальную позицию 2-го блока с предыдущей конечной позицией блока.
Я надеюсь, что это имеет смысл.
Комментарии:
1. Я пробую эту идею прямо сейчас! Спасибо за помощь. Будет держать вас в курсе.