Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Unity, C#. Проблема с кодом. Нужна помощь

EvGame Pro Знаток (417), на голосовании 2 недели назад
Большая просьба без агрессии,

(Объект 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();

}
}
}
Голосование за лучший ответ
SharaBetaTeam Official Wolf Ученик (238) 1 месяц назад
Ваш код выглядит правильным, но есть одна проблема, которую я заметил. В методе `TrigerChank` вы меняете массив `RoadMassiv`, но не обновляете ссылки на объекты в этом массиве в компоненте `endlessSpawn`. Это может привести к тому, что объекты не будут перемещаться корректно.

Чтобы исправить эту проблему, вам нужно обновить ссылки на объекты в компоненте `endlessSpawn` после того, как вы изменили массив `RoadMassiv`. Вы можете сделать это, добавив следующий код в метод `TrigerChank`:

csharp
endlessS.RoadMassiv = newRoadMassiv;


Это обновит ссылки на объекты в компоненте `endlessSpawn` и должно решить вашу проблему. Проверьте.
ссс сссУченик (95) 1 месяц назад
спасибо
Похожие вопросы