Я разместил PlatformSpawner снаружи, справа от камеры. Затем я поместил в него PlatformSpawner.cs. Я сделал несколько префабов под названием «Платформа 02.01.03» и т. д., которые включают в себя (пустой родительский, дочерний спрайт). В любом случае, есть также префабы Rope, которые соединяют префабы платформы.
PlatformSpawner порождает их, а Platform Parent (пустой в сцене) сохраняет их.
Вот схема, которую я хотел.

Префабы платформы;
Родительский элемент: Empty(Platform.cs, Box Cold 2D)
Дочерний элемент: aa (Sprite Renderer)
Префабы Rope:
Родительский элемент: Empty(Rope.cs)
Дочерний элемент: cc(Sprite) Renderer)
Я перепробовал все, но так и не приблизился к хорошему результату. Есть ли кто-нибудь, кто может помочь?
Код: Выделить всё
using UnityEngine;
public class PlatformSpawner : MonoBehaviour
{
[SerializeField] private GameObject[] platformPrefabs;
[SerializeField] private Transform platformParent;
public float platformSpawnTime = 2f;
[Range(0, 1)] public float platformSpawnTimeFactor = 0.1f;
public float platformSpeed = 1f;
[Range(0, 1)] public float platformSpeedFactor = 0.2f;
private float _platformSpawnTime;
private float _platformSpeed;
private float timeAlive;
private float timeUntilPlatformSpawn;
private void Start()
{
GameManager.Instance.onGameOVer.AddListener(ClearPlatforms);
GameManager.Instance.onPlay.AddListener(ResetFactors);
}
private void Update()
{
if (!GameManager.Instance.isPlaying) return;
timeAlive += Time.deltaTime;
CalculateFactors();
SpawnLoop();
}
private void SpawnLoop()
{
timeUntilPlatformSpawn += Time.deltaTime;
if (timeUntilPlatformSpawn >= _platformSpawnTime)
{
Spawn();
timeUntilPlatformSpawn = 0f;
}
}
private void ClearPlatforms()
{
foreach (Transform child in platformParent)
Destroy(child.gameObject);
}
private void CalculateFactors()
{
_platformSpawnTime = platformSpawnTime / Mathf.Pow(timeAlive, platformSpawnTimeFactor);
_platformSpeed = platformSpeed * Mathf.Pow(timeAlive, platformSpeedFactor);
}
private void ResetFactors()
{
timeAlive = 1f;
_platformSpawnTime = platformSpawnTime;
_platformSpeed = platformSpeed;
timeUntilPlatformSpawn = 0;
}
private void Spawn()
{
GameObject prefab = platformPrefabs[Random.Range(0, platformPrefabs.Length)];
GameObject spawned = Instantiate(prefab, transform.position, Quaternion.identity);
spawned.transform.SetParent(platformParent, true);
Platform mover = spawned.GetComponent
();
mover.Init(_platformSpeed);
}
}
Код: Выделить всё
using UnityEngine;
public class Platform : MonoBehaviour
{
private float speed;
private float destroyXPosition = -20f;
public void Init(float moveSpeed)
{
speed = moveSpeed;
}
private void Update()
{
transform.position += Vector3.left * speed * Time.deltaTime;
if (transform.position.x < destroyXPosition)
Destroy(gameObject);
}
}
Код: Выделить всё
using UnityEngine;
public class Rope : MonoBehaviour
{
//nothing
}

Подробнее здесь: https://stackoverflow.com/questions/798 ... s-together
Мобильная версия