SharaBetaTeam Official Wolf
Знаток
(294)
8 месяцев назад
Ваш код выглядит правильным, но есть одна проблема, которую я заметил. В методе `TrigerChank` вы меняете массив `RoadMassiv`, но не обновляете ссылки на объекты в этом массиве в компоненте `endlessSpawn`. Это может привести к тому, что объекты не будут перемещаться корректно.
Чтобы исправить эту проблему, вам нужно обновить ссылки на объекты в компоненте `endlessSpawn` после того, как вы изменили массив `RoadMassiv`. Вы можете сделать это, добавив следующий код в метод `TrigerChank`:
csharp
endlessS.RoadMassiv = newRoadMassiv;
Это обновит ссылки на объекты в компоненте `endlessSpawn` и должно решить вашу проблему. Проверьте.
(Объект Parent нужен для того чтобы будущем добавить на него скрипт двигающий его в сторону игрока. Тем самым будет эффект движения игрока в мире но на самом деле от будет только перемещаться влево и вправо)
Я написал Скрипты чтобы при пересечении триггера самый ближний чанк перемещался назад. и тем самым добиться бесконечной трассы. Но возникли некоторые проблемы. Возможно там довольно простая ошибка, но что то я ее не заметил
Ссылка на видео Демонстрацию проблемы и скриншоты из Unity https://drive.google.com/drive/folders/1oV6zYfoRjvhHq-SlZXXyey-2-QcZstxt?usp=sharing :
Скрипт RoadInfo:
public class RoadInfo : MonoBehaviour
{
public GameObject roadEnd;
}
------------------------------------
Скрипт endlessSpawn:
public class endlessSpawn : MonoBehaviour
{
public Vector3 startPos;
public GameObject road;
Transform endPos;
RoadInfo inf;
public int MaxChank;
public GameObject[] RoadMassiv;
public Transform Parent;
GameObject[] newRoadMassiv;
void Start()
{
RoadMassiv = new GameObject[MaxChank];
GameObject newRoad = Instantiate(road, startPos, Quaternion.identity);
inf = newRoad.GetComponent<RoadInfo>();
endPos = inf.roadEnd.transform;
RoadMassiv[0] = newRoad;
RoadMassiv[0].transform.SetParent(Parent);
for (int i = 1; i < MaxChank; i++)
{
newRoad = Instantiate(road, endPos.position, Quaternion.identity);
inf = newRoad.GetComponent<RoadInfo>();
endPos = inf.roadEnd.transform;
RoadMassiv[i] = newRoad;
RoadMassiv[i].transform.SetParent(Parent);
}
}
public void TrigerChank()
{
RoadMassiv[0].transform.position = endPos.position;
inf = RoadMassiv[0].GetComponent<RoadInfo>();
endPos = inf.roadEnd.transform;
newRoadMassiv = RoadMassiv;
for (int i = 0; i < RoadMassiv.Length; i++)
{
if(i + 1 < RoadMassiv.Length)
{
RoadMassiv[i] = newRoadMassiv[i + 1];
}
else
{
RoadMassiv[i] = newRoadMassiv[0];
}
}
}
}
----------------------------------------
Скрипт Spawn Trigger:
public class SpawnTrigger : MonoBehaviour
{
public endlessSpawn endlessS;
bool DontUse = true;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player" )
{
endlessS.TrigerChank();
}
}
}