Game Dev Study Log

by ricale

취미로 하는 게임 개발 공부

강의 23,24,25,26강 수강

#1

강의 수강: Unity Turn-Based Strategy Game: Intermediate C# Coding

23. Unit Selected Visual, Events (10:44)

선택된 유닛을 강조하기 위한 별도의 3D 오브젝트 SelectedVisual 를 만들어 Unit Prefab 에 부착.

해당 오브젝트에는 SelectedUnitVisual 이라는 이름의 스크립트 부착.

SelectedUnitVisual 스크립트는 현재 Unit 이 선택된 Unit 인지 아닌지에 따라 SelectedUnit 오브젝트를 보이게/안보이게 함.

Observer Pattern 으로 selectedUnit 이 바뀔 때마다 이벤트 발송.

public event EventHandler OnSelectedUnitChanged;
private void SetSelectedUnit(Unit unit)
{
    seleectedUnit = unit;
    OnSelectedUnitChanged?.Invoke(this, EventArgs.Empty);
}
public Unit GetSelectedUnit()
{
    return seleectedUnit;
}

관련해서 설명을 많이 해줬는데 이 강의가 유난히 말이 빠르고 발음이 구분이 잘 안 되어서, 코드로 보이는 것 이상은 잘 이해 못한 것 같다. 그나마 다행인 건 관련해서 이후 강의에서 코드를 개선할 예정이라고 하니, 그 때 다시 설명을 듣고 자세히 이해하는 것으로 하자.

Unit Prefab 내부에 있는 SelectedUnitVisual 스크립트는 Prefab 외부에 있는 (= 씬에 있는) 객체의 레퍼런스를 알 수 없다. 따라서 이벤트를 수신할 수 없는 상황인데, 이건 다음 강의에서 Singletone Pattern 을 사용해서 해결한다.

24. Unit Selected Visual, Singleton (09:10)

강의에 나온 Singletone Pattern 코드는 익히 알려진 것과 크게 다르지 않았음.

Awake()Start() 보다 항상 먼저 실행됨. 따라서 내부 초기화는 Awake() 에서, 외부와 연결된 초기화는 Start() 에서 하면 좋다.

private void Start()
{
    UnitActionSystem.Instance.OnSelectedUnitChanged += UnitActionSystem_OnSelctedUnitChanged;
    UpdateVisual();
}

private void UnitActionSystem_OnSelctedUnitChanged(object sender, EventArgs empty)
{
    UpdateVisual();
}

private void UpdateVisual() {
    Unit selcectedUnit = UnitActionSystem.Instance.GetSelectedUnit();
    if(unit == selcectedUnit)
    {
        meshRenderer.enabled = true;
    } else
    {
        meshRenderer.enabled = false;
    }
}

25. Intro - Grid System and Camera (00:52)

Grid 시스템과 카메라 조작을 구현하는 섹션으로 넘어가봅시다.

26. Grid System Design (03:54)

Grid 시스템 설계 개요.

#2

Unit 를 위한 .gitignore https://github.com/github/gitignore/blob/main/Unity.gitignore