오늘 학습 키워드

최종 팀 프로젝트

오늘 학습 한 내용을 나만의 언어로 정리하기

시네머신 공부

  • 시네머신을 써가지고 플레이어를 보게 하는 카메라를 만들고 싶었음
  • 그래서 가상 카메라를 만들어서 Follow를 플레이어로 하고 Look At을 None으로 함
  • 그리고 폴리곤 콜라이더 만들어서 confiner2D에 연결해줌
public enum ShakeOrder  
{  
    SpecialEffect = 0,  
    Player = 1,  
    Monster = 2  
}  
public class CameraManager : Singleton<CameraManager>  
{  
    private CinemachineVirtualCamera virtualCamera;  
    private CinemachineBasicMultiChannelPerlin perlin;  
      
    private ShakeOrder currentShakeOrder;  
    private Coroutine shakeCoroutine;  
  
    private void Start()  
    {  
        virtualCamera = FindFirstObjectByType<CinemachineVirtualCamera>();  
        if(virtualCamera == null)  
        {  
            Debug.LogError("CinemachineVirtualCamera not found in the scene.");  
            return;  
        }  
        perlin = virtualCamera.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();  
        if (perlin == null)  
        {  
            Debug.LogError("CinemachineBasicMultiChannelPerlin component not found on the virtual camera.");  
            return;  
        }  
    }  
  
  
    public void ShakeCamera(float duration, float magnitude, float frequency, ShakeOrder shakeOrder)  
    {  
        if (shakeCoroutine == null)  
        {  
            currentShakeOrder = shakeOrder;  
            shakeCoroutine = StartCoroutine(ShakeCameraCoroutine(duration, magnitude, frequency));  
        }  
        else  
        {  
            if (currentShakeOrder >= shakeOrder)  
            {  
                StopCoroutine(shakeCoroutine);  
                StopCameraShake();  
                  
                currentShakeOrder = shakeOrder;  
                  
                Debug.Log($"[카메라] {currentShakeOrder}의 요청에 의해 카메라 흔들림");  
                shakeCoroutine = StartCoroutine(ShakeCameraCoroutine(duration, magnitude, frequency));  
            }  
        }  
    }  
  
    private IEnumerator ShakeCameraCoroutine(float duration, float magnitude, float frequency)  
    {  
        perlin.m_AmplitudeGain = magnitude;  
        perlin.m_FrequencyGain = frequency;  
        yield return new WaitForSeconds(duration);  
        StopCameraShake();  
        shakeCoroutine = null;  
    }  
  
    private void StopCameraShake()  
    {  
        perlin.m_AmplitudeGain = 0f;  
        perlin.m_FrequencyGain = 0f;  
    }       
}

스태미나 회복 수식이 잘못 된 듯 하다

  • 역으로 스태미나가 많아질 수록 속도가 느려지는 문제 발생
  • 수식을 잘못 만든 것 같음

  • 이게 맞는듯

커서를 직접 만들자

  • 자꾸 커서 로딩하는데 문제가 생겨서 그냥 커서 매니저에서 애초에 커서를 만드는걸로 함
private Transform MakeCursor()  
{  
    GameObject go = new GameObject("InGameCursor");  
    SpriteRenderer spriteRenderer = go.AddComponent<SpriteRenderer>();  
    spriteRenderer.sprite = cursorSprite;  
    spriteRenderer.sortingOrder = 500;  
    go.SetActive(true);  
    return go.transform;  
}

학습하며 겪었던 문제점 & 에러

문제 1

  • 문제&에러에 대한 정의

시네머신 카메라용 콜라이더를 만들었는데 그 뒤로 플레이어가 자꾸 떨어졌음

  • 해결 방법

폴리곤 콜라이더를 안쓰고 박스 콜라이더를 써서 문제였음

문제 2

  • 문제&에러에 대한 정의

자꾸 카메라가 빙글빙글 돔

  • 내가 한 시도

콜라이더를 바꿈, Aim을 Composer 말고 Do nothing으로 바꿈

  • 해결 방법

애초에 Follow와 Look At 이 같아서 생긴 문제였음.

  • 새롭게 알게 된 점

시네머신 카메라에서 Follow가 Look At 방향으로 본다는 것을 잊지 말자!!!

내일 학습 할 것은 무엇인지