DollyTrack

어제했던 카메라 작업은 단순히 사용하고 있던 Cinemachine Virtual Camera의 Rotation만 고정시켜준 느낌이다.

 

하지만 카메라가 플레이어를 따라다니면서 구조물의 Collider에 부딪힐 때마다

카메라가 덜그럭 거리는 현상이 있다.

 

부자연스러운 카메라를 어떻게 할까 팀원과 얘기를 나누다가 

카메라가 플레이어를 따라다니되, X축으로만 움직이는 카메라가 좋을 것 같다는 결론이 나왔다.

 

 

이를 구현하기 위해 Cinemachine 안에 있는

Dolly Track을 사용해봤다.

 

Dolly Camera with Track을 선택했을 경우

사진과 같이 Dolly Track과 Virtual Camera 두 오브젝트가 생성된다.

 

Dolly Track 안 CinemachineSmoothPath

 

나는 일자로 움직이는 트랙이 필요하므로 끝과 시작, 두 개의 Waypoints만 지정해줬다.

 

VirtualCamera. 자동으로 Body가 Tracked Dolly로 설정되어있고 Path는 같이 생성된 Dolly Track 의 Path 스크립트다.

 

생성된 Dolly Track

 

트랙을 생성한 후 Auto Dolly의 Enabled를 체크해줘야지 지정한 객체를 따라다닌다.

 

설정을 하고 코드로 타이쿤 게임 시작시, 새로 생성한 VirtualCamera가 플레이어를 바라볼 수 있도록 수정해줬다.

또 평소엔 타이쿤 카메라가 꺼져있다가, 타이쿤 게임이 시작됐을 때 켜지도록 코드로 구현했다.

public void TycoonCamSetting()
{
    _tycoonCamera = TycoonManager.Instance.TycoonVirtualCamera;
    _tycoonCamera.gameObject.SetActive(true);
    _tycoonCamera.Follow = VirtualCamera.Follow;
    _tycoonCamera.LookAt = VirtualCamera.LookAt;
}

public void NonTycoonCamSetting()
{
    _tycoonCamera.gameObject.SetActive(false);
}

 

그리고 virtualCamera의 Priority를 30으로 높여, 원래 사용하던 카메라의 우선순위(10)보다 높게 설정해 타이쿤을 시작하면 이 카메라가 적용되도록 해줬다.

 

 

 

 

음식 Match 오류 해결

식탁에 음식이 먼저 놓아졌을 경우 손님이 음식을 먹지 않는 오류가 있었다.

 

 

디버그 찍어보니 _currentCustomer.TargetFoodName에 null이 들어가 있다.

 

중단점 찍어본 곳

 

내가 생각한 MatchCustomerFood 함수가 실행되는 타이밍은

1. 음식이 식탁에 놓아졌을 때

2. 손님이 앉아서 음식을 골랐을 때

였지만

 

실제로 실행되는 타이밍은

1. 음식이 식탁에 놓아졌을 때

2. 손님이 식당에 들어왔을 때

이어서 작동이 제대로 되지 않았던 거다.

 

따라서 주문할 때 MatchCustomerFood함수가 실행되도록 코드를 고쳤다.

 

CustomerController.cs

public event Action OnSelectFood;
...
private void SelectFood()
{
...
	OnSelectFood?.Invoke();
}

 

FoodPlace.cs

public CustomerController CurrentCustomer
{
    get { return _currentCustomer; }
    set
    {
        if (value == null)
        {
            if (_currentCustomer != null)
            {
                _currentCustomer.OnSelectFood -= MatchCustomerFood;
            }
        }

        _currentCustomer = value;

        if (_currentCustomer != null)
        {
            _currentCustomer.OnSelectFood += MatchCustomerFood;
        }
    }
}

 

이제 음식이 식탁에 미리 놓아져 있어도 손님이 음식을 먹는다.

 

'내일배움캠프(Unity)' 카테고리의 다른 글

Sprite Atlas  (0) 2024.02.20
Unity에서 Fog 구현  (0) 2024.02.20
TIL - CinemachineVirtualCamera Aim 조절하기  (0) 2024.02.06
실전 프로젝트 중간발표  (0) 2024.02.05
TIL  (0) 2024.02.01