✍️ 개요
[ 2D Endless Platform 구현 (1편) ]
이전에 끝이 없는 2D Platform 기능에서 하나의 Layer만 사용하는 Serial Endless Platform을 구현했습니다.
오늘은 하나가 아닌, 여러 개의 Layer을 사용하는 Parallel Endless Platform을 구현해보도록 하겠습니다.
※ 위 포스터와 코드가 변경된 부분이 많습니다.
📌 시스템 설계
Parallel Endless Platform은 N개의 Serial Endless Platform이 합쳐진 개념입니다.
EndlessPlatformSerialSpawner는 1개의 Layer에 해당하는 맵을 담당합니다.
즉, N개의 EndlessPlatformSerialSpawner을 다루는 하나의 컨트롤러를 만들면 됩니다.
이때, 각각의 SerialSpawner를 세심하게 조절할 수 있도록 할 예정입니다.
(각 Layer의 이동속도를 서로 다르게 표현하여 입체적으로 연출)
📌 코드 분석
위 하이러키를 살펴보면 구조를 쉽게 파악할 수 있습니다.
부모 오브젝트에 Rarallel Spawner을 추가하고, 자식 오브젝트들에게는 Serial Spawner을 추가합니다.
이때, Parallel Spawner에 의해 컨트롤되는 Serial Spawner라면 Self Managed을 체크 해제합니다.
(Serial Spawner가 스스로 동작한다면 체크)
※ 이 부분은 이전 포스터 코드와 다른 부분으로, 마지막 문단인 [ 코드 첨부 ] 을 확인해주세요.
public class EndlessPlatformParallelSpawner : MonoBehaviour
{
[SerializeField] private float minMoveSpeed;
[SerializeField] private float maxMoveSpeed;
private List<EndlessPlatformSerialSpawner> spawners;
private void Start()
{
spawners = new List<EndlessPlatformSerialSpawner>(GetComponentsInChildren<EndlessPlatformSerialSpawner>());
if (spawners.Count == 0)
{
Debug.LogError("No spawner found.");
return;
}
spawners[0].Initialize(maxMoveSpeed);
for (int i = 1; i < spawners.Count; i++)
{
var moveSpeed = Mathf.Lerp(maxMoveSpeed, minMoveSpeed, (float)i / (spawners.Count - 1));
spawners[i].Initialize(moveSpeed);
}
}
private void Update()
{
foreach (var spawner in spawners)
{
spawner.SpawnRightPlatformNode();
spawner.SpawnLeftPlatformNode();
spawner.ClearPlatformNode();
spawner.MovePlatformNode();
}
}
EndlessPlatformParallelSpawner은 사실 관리자에 가깝습니다.
결국 내부 로직은 EndlessPlatformSerialSpawner이 수행할 뿐이죠.
추가로 각 Layer의 속도를 Layer 순서에 따라 차별화하는 역할도 수행합니다.
위 영상처럼 각 Layer가 서로 다른 속도로 이동하며 입체감을 줍니다.
📌 코드 첨부
끝 없는 2D Platform 기능은 아래에서 자세히 살펴볼 수 있습니다.
[ 2D Endless Platform 구현 (1편) ]
'유니티(Unity) > 기능 구현' 카테고리의 다른 글
[Unity 기능] 2D Bone Animation 제작 (0) | 2025.01.05 |
---|---|
[Unity 기능] 2D Endless Platform 구현 (1편) (2) | 2025.01.01 |
[Unity 기능] 컴파일 시점 제어하기 (1) | 2024.12.25 |
[Unity 기능] 커스텀 패키지 제작하기 (0) | 2024.12.20 |
[Unity 기능] Sprite Atlas에 대하여 (1) | 2024.12.15 |