Game Dev Study Log

by ricale

취미로 하는 게임 개발 공부

강의 20,21,22강 수강

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

20. Unit Animator Parameters (07:17)

Animation Paramters 는 네 종류가 있다. Float, Int, Bool, Trigger.

Trigger 는 boolean 비슷한 특수한 값이다. true 로 값을 바꾼 뒤 false 로 직접 바꿔줄 필요가 없다. 나중에 shoot 애니메이션 (총 쏘는 애니메이션?) 적용 시 사용해 볼 것이다.

Animator - Parameters 메뉴에 파라미터를 추가하고, Transition 의 Inspector - Conditions 섹션에서 해당 파라미터를 조건으로 지정해준다.

screenshot

그 다음 스크립트에서 코드 작성

[SerializeField] private Animator unitAnimator;
unitAnimator.SetBool("IsWalking", true);
unitAnimator.SetBool("IsWalking", false);

21. Unit Rotate when Moving (05:10)

객체를 회전시키는 방법은 세 가지.

  • transform.rotation: Quaternion 사용
  • transform.eulerAngles: 각도 사용
  • transform.forward: Vector 사용

여기서는 가장 간단한 transform.forward 사용

    private void Update()
    {
        // ...
        float rotateSpeed = 10f;
        transform.forward = Vector3.Lerp( // 두 백터를 interpolate 해주는 함수
            transform.forward, // 현재 방향 백터. 매 프레임마다 바뀔 수 있음.
            moveDirection, // 목표 방향 백터.
            Time.deltaTime * rotateSpeed // rotateSpeed 를 곱해주지 않으면 너무 느리다.
        );
        // ...
    }

22. Unit Selection (14:10)

여러 유닛 중 원하는 유닛을 선택하는 기능 구현.

일단 씬에 있던 기존 Unit 객체를 Project 로 드래그앤드랍 해서 재사용 가능하게 만들고, 재사용 가능해진 객체 (강의에서는 Prefab 이라고 말한다.) 를 다시 드래그앤드랍 해서 씬에 Unit 객체를 추가.

특정 객체 선택을 위해서는 마우스 Raycast 기능을 써야 하는데, 이 경우 객체가 충돌 가능해야 한다. 하지만 현재 Unit 객체는 선택이 가능하지 않으므로 Collider 를 설정해줘야 한다.

  • Collider 를 특정 객체에만 지정하지 말고 그 객체의 Prefab 에 모두 적용되게끔 해줘야 한다.
  • Collider 의 IsTrigger 플래그를 켜면 실제 물리적인 계산은 하지 않고 트리거로서만 동작하는 듯 하다.

Unit Prefab 에 Layer 도 "Units" 이라는 이름으로 새로 만들어줘서 지정.

private bool TryHandleUnitSelection()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    if(Physics.Raycast(
        ray,
        out RaycastHit raycastHit,
        float.MaxValue,
        unitLayerMask
    ))
    {
        if(raycastHit.transform.TryGetComponent<Unit>(out Unit unit))
        {
            seleectedUnit = unit;
            return true;
        }
    }

    return false;
}

특정 스크립트의 초기화를 빨리 하고 싶을 때는 Edit - Settings - Script Excution Order 를 사용.

screenshot

apply 누르는 순간 값이 자동으로 조금 바뀌는 데 중요한 건 아닌듯.