강의 55,56,57강 수강
강의 수강: Unity Turn-Based Strategy Game: Intermediate C# Coding
55. Unit World UI (15:55)
Unit Prefab 내부에 UI Canvas 생성. Render Mode 는 World Space 로.
UI 만 만들어 붙이면 캐릭터가 회전할 때 같이 회전해서 보기 불편하므로 항상 카메라를 바라보도록 하는 스크립트 LookAtCamera 도 작성해서 붙여준다.
LateUpdate 라이프 사이클도 사용. 이건 업데이트가 끝난 직후에 실행된다.
UI Image 객체를 사용할 때, 단순 색상 적용이 아닌 이미지 리소스를 적용해야만 보이는 옵션이 있다. 이 경우 Image - Source Image 에서 동그라미를 클릭해 Unity 에서 기본으로 제공하는 리소스들을 적용해 사용하면 간편하다. 예를 들어 white1px 를 적용하면 색상 적용도 잘 되고, 이미지 리소스 적용 시에만 적용할 수 있는 옵션도 적용할 수 있다. 이 옵션 적용으로 이미지를 체력바처럼 적용할 수 있다.

56. Action Camera (14:54)
기존 카메라인 CinemachineVirtualCamera 를 복사해서 ActionVirtualCamera 를 만들고, ActionVirtualCamera 의 Priority 를 올리고 필요할 때마다 활성화/비활성화 해서 사용.
Priority 높은 카메라가 활성화되는 순간 자동으로 해당 카메라로 transition 발생. 이 transition 의 메서드 및 속도는 MainCamera 의 CinemachineBrain 에서 설정.
ActionVirtualCamera 카메라를 총 쏘는 Unit 의 어깨 오른쪽 위에 두고 타겟을 바라보게끔 하는 계산
switch(sender)
{
case ShootAction shootAction:
Unit shooterUnit = shootAction.GetUnit();
Unit targetUnit = shootAction.GetTargetUnit();
Vector3 cameraCharacterHeight = Vector3.up * 1.7f; // 실제 `Unit` 의 (지면으로부터의) 어깨 부근 좌표
Vector3 shootDir = (
targetUnit.GetWorldPosition() - shooterUnit.GetWorldPosition()
).normalized;
float shoulderOffsetAmount = 0.5f; // 어깨에서 오른쪽? 으로 얼마나 띄울 것인가
Vector3 shoulderOffset =
Quaternion.Euler(0, 90, 0) * // Y 축 기준 회전
shootDir *
shoulderOffsetAmount;
Vector3 actionCameraPosition =
shooterUnit.GetWorldPosition() +
cameraCharacterHeight +
shoulderOffset +
shootDir * -1;
actionCameraGameObject.transform.position = actionCameraPosition;
actionCameraGameObject.transform.LookAt(
targetUnit.GetWorldPosition() + cameraCharacterHeight
);
ShowActionCamera();
break;
}
57. Grid Visual Colors (17:50)
액션에 따라 사정거리를 표시하는 GridSystemVisual 의 색상을 변경.
enum 을 만들어서 enum 별로 Material 을 지정하고 사용할 수 있게 한다.
[Serializable]
public struct GridVisualTypeMaterial
{
public GridVisualType gridVisualType;
public Material material;
}
public enum GridVisualType
{
White,
Blue,
Red,
Yellow,
}
이외에도 실제 액션이 가능한 GridPosition 뿐만 아니라 사정거리를 표시하는 것도 구현했고, 비효율적인 렌더링 로직도 개선했다.