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