오브젝트를 자동으로 움직이게 하는 컴포넌트,
특정 타일로부터 신호를 받아 이벤트를 호출하는 SignalTrigger 및 SignalListenr를 추가했습니다.
QTE 텍스트를 ▲▼◀▶ 출력하게 했는데 폰트가 깨졌네요.

Scene View의 기즈모만 봐도 대충 뭔지 이해는 가실 것이라 생각합니다.
우선 AutoMover
public interface IInteractiveObject : IStageObjectController
{
public void Initialize(IStageStateProvider stageStateProvider);
//IStageStateProvider: 스테이지가 정지 상태인지 확인할 때 필요
} //AutoMover가 상속받는 놈
public interface IStageObjectController
{
public void Enable(bool enable);
public void Restart();
} //IInteractiveObject가 상속받는, 스테이지 오브젝트들이라면 다 상속받는 인터페이스
기본적으로 상속받는 인터페이스입니다.
IStageStateProvider는 어따 써먹느냐?
while (대충 조건)
{
token.ThrowIfCancellationRequested();
if(stageStateProvider.GetState() != StageEnum.State.Playing)
{
await UniTask.Yield();
continue;
}//정지 로직에서 Time.timeScale을 사용하지 않기 때문에
//'현재 stage state가 Playing이 아니면 정지'시키기 위해 필요
//이동 로직 부분
}
실제 이동 로직의 while문에서 '현재 스테이지 정지'상태이지 여부를 판단하기 위해 사용합니다.
UniTask 내부의 while문이라 continue 직전에도 Unitask.Yield()를 빼먹으면 안 됩니다.

현재로서는
A->B의 Straight,
A<->B의 Repeat,
대충 원운동의 CircleLoop가 있습니다.



CustomEditor를 사용했기 때문에 각 타입마다 요구되는 필드만 나오게 할 수 있습니다.
StartOnAwake를 넣는 센스~~~~~~~~~~~~~~~~~~~~
다음은 타일끼리 신호를 전달하는 클래스들입니다.

다이어그램 좀 이쁘게 그린듯요
핵심만 설명하자면
key 신호를 보내는 SignalTriggerTile(presenter,view)
key 신호를 요구하는 SignalListner(Monobehaviour)
key 신호를 등록, 관리하는 SignalService 셋으로 이루어집니다.
private void OnEnter(Collider2D collider2D)
{
if (!enable)
return;
if (collider2D.CompareTag("Player") == false)
return;
if (view.IsEnterKeyExist)
{
switch (view.EnterType)
{
case SignalTriggerView.EnterSignalType.None:
{
OnSignalSuccess();
}
break;
case SignalTriggerView.EnterSignalType.QTE:
{
PlayQTE(collider2D);
}
break;
case SignalTriggerView.EnterSignalType.Progress:
{
PlayProgress(collider2D);
}
break;
}
}
}
닿기만 하면 발동되는 트리거는 재미가 없으니 이전에 만들어둔 InputQTEService, InputProgress와 연동해 작은 QTE 혹은 프로그레스를 실행해야 작동하게 해봤습니다.

OnDrawGizmo를 이용해 씬 뷰에서도 쉽게 확인할 수 있습니다.
캡쳐하고보니 기즈모가 약간 이상하네요.

그래서 수정했습니다. 훨씬 이쁩니다.

암튼 Signal Key 데이터에 관련해서는 결국 Scene에서 작업을 해야 하니 Table Data가 View에 달아놨습니다.

Signal Listener는 굳이 Presenter를 나누지 않고 SignalListenr 하나로만 두었습니다.
튜토리얼 시스템 작업을 하려다가 시나리오 구성까지 넘어가게 됐는데, 이런저런 한계 때문에 쉽지 않네요.
그래서 시나리오 관련은 적당히 넘어가고 일단 '게임스러운 기능'들이라도 최대한 만들어두려고 합니다.
다음에 할거:
게임 최초 컷씬 시스템(게임 최초 실행 시 로비로 넘어가지 않고 짧은 컷씬 후 바로 스테이지로 진행),
스테이지별 ChatCard 호출 시스템 만들기
'무제_LR' 카테고리의 다른 글
| 로비 UI 개선 - 메인 패널, 스테이지 패널 (0) | 2026.01.11 |
|---|---|
| 게임 최초 컷씬, 스테이지 데이터 ChatCardEvent 추가 (0) | 2026.01.10 |
| InputProgress(연타), InputQTE 추가 (0) | 2026.01.06 |
| ChatCard(가제) 추가, Runtime Pivot 수정 주의점 (0) | 2026.01.04 |
| Effect Prefab 생성 - Pooling (0) | 2026.01.02 |