Я решил это, сделав копию каждого слоя. Например, layer_0 виден в поле зрения камеры, layer_0_0 находится слева. И двигаться, и когда layer_0 полностью покинул камеру, он помещается в начало и так далее:
public class ParalaxPlayer : MonoBehaviour {
[SerializeField] GameObject imageContainer;
public IEnumerator PlayParallax() {
while (true) {
// first layer
imageContainer.GetComponentsInChildren<Image>()[0].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[0].transform.position.x + 0.3f,
imageContainer.GetComponentsInChildren<Image>()[0].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[0].transform.position.z);
imageContainer.GetComponentsInChildren<Image>()[1].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[1].transform.position.x + 0.3f,
imageContainer.GetComponentsInChildren<Image>()[1].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[1].transform.position.z);
if (imageContainer.GetComponentsInChildren<Image>()[0].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[0].transform.position = new Vector3(-1920, 0, 0);
}
if (imageContainer.GetComponentsInChildren<Image>()[1].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[1].transform.position = new Vector3(-1920, 0, 0);
}
// seconds layer
imageContainer.GetComponentsInChildren<Image>()[2].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[2].transform.position.x + 0.7f,
imageContainer.GetComponentsInChildren<Image>()[2].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[2].transform.position.z);
imageContainer.GetComponentsInChildren<Image>()[3].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[3].transform.position.x + 0.7f,
imageContainer.GetComponentsInChildren<Image>()[3].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[3].transform.position.z);
if (imageContainer.GetComponentsInChildren<Image>()[2].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[2].transform.position = new Vector3(-1920, 0, 0);
}
if (imageContainer.GetComponentsInChildren<Image>()[3].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[3].transform.position = new Vector3(-1920, 0, 0);
}
// third layer
imageContainer.GetComponentsInChildren<Image>()[4].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[4].transform.position.x + 1.1f,
imageContainer.GetComponentsInChildren<Image>()[4].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[4].transform.position.z);
imageContainer.GetComponentsInChildren<Image>()[5].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[5].transform.position.x + 1.1f,
imageContainer.GetComponentsInChildren<Image>()[5].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[5].transform.position.z);
if (imageContainer.GetComponentsInChildren<Image>()[4].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[4].transform.position = new Vector3(-1920, 0, 0);
}
if (imageContainer.GetComponentsInChildren<Image>()[5].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[5].transform.position = new Vector3(-1920, 0, 0);
}
// fourth layer
imageContainer.GetComponentsInChildren<Image>()[6].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[6].transform.position.x + 1.5f,
imageContainer.GetComponentsInChildren<Image>()[6].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[6].transform.position.z);
imageContainer.GetComponentsInChildren<Image>()[7].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[7].transform.position.x + 1.5f,
imageContainer.GetComponentsInChildren<Image>()[7].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[7].transform.position.z);
if (imageContainer.GetComponentsInChildren<Image>()[6].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[6].transform.position = new Vector3(-1920, 0, 0);
}
if (imageContainer.GetComponentsInChildren<Image>()[7].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[7].transform.position = new Vector3(-1920, 0, 0);
}
// fifth layer
imageContainer.GetComponentsInChildren<Image>()[8].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[8].transform.position.x + 1.9f,
imageContainer.GetComponentsInChildren<Image>()[8].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[8].transform.position.z);
imageContainer.GetComponentsInChildren<Image>()[9].transform.position = new Vector3(imageContainer.GetComponentsInChildren<Image>()[9].transform.position.x + 1.9f,
imageContainer.GetComponentsInChildren<Image>()[9].transform.position.y, imageContainer.GetComponentsInChildren<Image>()[9].transform.position.z);
if (imageContainer.GetComponentsInChildren<Image>()[8].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[8].transform.position = new Vector3(-1920, 0, 0);
}
if (imageContainer.GetComponentsInChildren<Image>()[9].transform.position.x >= 1920) {
imageContainer.GetComponentsInChildren<Image>()[9].transform.position = new Vector3(-1920, 0, 0);
}
yield return new WaitForSeconds(0.005f);
}
}
void Start() {
StartCoroutine(PlayParallax());
}
void Update() {
}
}