심리스 로딩 (Seamless Loading) 로딩 화면 안 뜨고 바로 다음 지역이 불러와짐 사용자가 다음 구역에 가까워지기 전에 미리 필요한 데이터를 백그라운드에서 조금씩 불러오는(스트리밍) 방식
chunk 라고 작은 단위 개념으로 맵을 작게 쪼갬
+
시야 시스템 (Culling) 화면에 보이지 않는 객체 (object) 를 제외 시킴(cull) 🔴 Dirty: "이 덩어리 안에 있는 오브젝트가 움직였거나, 새로 생겼거나, 사라졌어! 새로운 정보로 업데이트해야 해." 🟢 Clean: "이 덩어리는 변화가 없어. 백그라운드 로딩/업데이트 작업을 건너뛰자."
view 와 viewmodel 사이 데이터 바인딩 을 씀 자동 반영 이라는 것임 동기화 라는 거임
mvvm 기법은 유니티 6.0 부터 가능하다
+
UI와 게임 로직 (전투 규칙, 유닛 상태, 턴 시스템)을 명확히 분리하고 싶을 때
유닛 정보판, 스킬창, 턴오더, 인벤토리, 대화창 구현할 때
단, 주의점!
수백개 유닛 나오는 대규모 구현엔 부적합
실 예시로 본 각 속성들
Model : hp mp 스탯, skill, ScriptableObject
ViewModel : 커맨드 명령, INotifyPropertyChanged,
View : 유닛 표시, HUD
+
유니티에서의 바인딩 방식
수동 바인딩 — View에서 ViewModel 이벤트/델리게이트를 직접 구독 Reactive(예: UniRx) — 옵저버블로 바인딩. 상태 변화가 복잡하면 추천.
+
추가 설명
게임에서 일어나는 일
ㅁ 턴이 바뀜 ㅁ 이동 가능 칸이 바뀜 ㅁ 스킬 버튼이 켜짐/꺼짐
이런 게임 로직이 있고, 그걸 화면에 보여주는 UI가 있음
이 두 개를 섞어 쓰면 코드가 난장판이 됨 이 걸 방지 하기 위해서 mvvm 을 씀
+
SRPG는 UI가 많음
ㅁ 유닛 정보창 ㅁ 턴 순서 UI ㅁ 이동/공격 버튼 ㅁ 스킬 목록 ㅁ 범위 표시
하나의 유닛 데이터가 바뀌면 이 여러 UI가 동시에 반응해야 함 MVVM은 이걸 자동으로 연결해줌
+
추가 실 예시
플레이어가 적에게 맞아서 HP가 100 → 60 이 됨
1) Model: HP = 60 변경 2) ViewModel: "HP 변함!" 이벤트 전송 3) View(UI): 그 이벤트 듣고 체력바 업데이트
+
다른 예시
public int MP; 1) Model: 마나 데이터만 저장
public class UnitViewModel
{
public UnitModel model;
// 이 ViewModel이 사용할 데이터 저장 변수
// 실제 캐릭터 정보(HP 등)를 들고 있는 상자라고 보면 됨
public event Action OnHpChanged;
// HP가 바뀌었을 때 UI에게 알려주는 알림 이벤트
// “HP 변함! UI 업데이트 해!” 라고 호출
public UnitViewModel(UnitModel m)
// 생성자: 이 ViewModel이 어떤 Model을 쓸지 설정하는 함수
{
model = m;
// 전달받은 m(Model)을 이 ViewModel의 model 변수에 저장
// "이 ViewModel은 이제 이 모델을 다룬다"라고 연결하는 작업
}
public void SetHP(int value)
// HP 값을 바꾸는 함수 (입력으로 받은 value를 사용)
// 외부에서 "이 HP로 바꿔!"라고 숫자 전달할 때 쓰는 수정 함수
{
model.HP = value;
// 모델의 HP를 입력받은 값(value)으로 실제 변경
// 캐릭터의 실제 체력 수치를 여기서 업데이트함
OnHpChanged?.Invoke();
// 만약 누군가 이벤트를 듣고 있으면 실행 → UI 갱신
// “HP 바뀜! UI야 반응해!”라고 신호를 보내는 부분
}
public int GetHP()
// 현재 HP 값을 가져오는 함수
// 외부(UI 등)가 "지금 HP 몇이야?"라고 물을 때 쓰는 조회 함수
{
return model.HP;
// 모델에 저장된 실제 HP 숫자를 반환
// 캐릭터가 가진 HP를 그대로 돌려준다
}
}