오늘 학습 키워드

유니티 심화

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

시네머신

  • 카메라 제어 시스템

  • 메인 카메라에 Cinemachine Brain 컴포넌트 넣고

  • Follow Virtual Camera 하나 빈 오브젝트 만들어서 그 안에 Cinemachine Virtual Camera 컴포넌트 넣기

  • 그리고 Follow 에 플레이어 넣기

  • Body : Follow 따라가면서 적용할 방식

    • Framing Transposer : 특정 프레임 안에 Follow를 가둬가면서 따라가는 방식
  • 카메라 이동 제한 걸려면 Cinemachine Confiner 2D 넣기

  • 그리고 빈 오브젝트 하나 만들어서 Polygon Collider 2D 넣기

  • 위 사진처럼 카메라가 움직일 영역을 폴리곤 콜라이더로 정하고 IsTrigger 체크

  • 그리고 Cinemachine Confiner 2D 에 Bouding Shape 2D 안에 폴리곤 콜라이더 넣으면 됨

카메라 연출 / 장면 전환 효과

카메라 흔들림 구현

  • Cinemachine Virtual Camera에서 Noise를 Basic Multi Channel Perlin으로 설정
  • Noise Profile은 6D Shake 로 설정
public class CameraShake : MonoBehaviour  
{  
    private CinemachineVirtualCamera virtualCamera;  
    private CinemachineBasicMultiChannelPerlin perlin;  
    private float shakeTimeRemaining;  
  
    private void Awake()  
    {  
        virtualCamera = GetComponent<CinemachineVirtualCamera>();  
        perlin = virtualCamera.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();  
    }  
  
    public void ShakeCamera(float duration, float amplitude, float frequency)  
    {  
        if (shakeTimeRemaining > duration)  
            return;  
        shakeTimeRemaining = duration;  
          
        perlin.m_AmplitudeGain = amplitude;  
        perlin.m_FrequencyGain = frequency;  
    }  
  
    void Update()  
    {  
        if (shakeTimeRemaining > 0)  
        {  
            shakeTimeRemaining -= Time.deltaTime;  
            if (shakeTimeRemaining <= 0f)  
            {  
                StopShake();  
            }  
        }  
    }  
  
    public void StopShake()  
    {  
        shakeTimeRemaining = 0;  
        perlin.m_AmplitudeGain = 0f;  
        perlin.m_FrequencyGain = 0f;  
    }  
}

카메라 전환 구현

  • Fixed Virtual Camera 하나 만들어서 거기다가도 Cinemachine Virtual Camera 넣어주기
  • Priority 5로 낮춤
public class VirtualCameraController : MonoBehaviour  
{  
    private CinemachineVirtualCamera vcam;  
  
    public int currentPriority = 5;  
    public int activePriority = 20;  
  
    private void Awake()  
    {  
        vcam = GetComponent<CinemachineVirtualCamera>();  
    }  
  
    private void OnTriggerEnter2D(Collider2D collision)  
    {  
        if (collision.gameObject.GetComponent<PlayerController>() != null)  
        {  
            vcam.Priority = activePriority;  
        }  
          
    }  
  
    private void OnTriggerExit2D(Collider2D collision)  
    {  
        if (collision.gameObject.GetComponent<PlayerController>() != null)  
        {  
            vcam.Priority = currentPriority;  
        }  
    }  
}
  • 그리고 Main Camera 가서 Default Blend 를 Ease In Out 1초로 변경

스테이지 구조 설계 및 확장

[Serializable]  
public class StageInfo  
{  
    public int stageKey;  
    public WaveData[] waves;  
  
    public StageInfo(int stageKey, WaveData[] waves)  
    {  
        this.stageKey = stageKey;  
        this.waves = waves;  
    }  
  
}  
  
[Serializable]  
public class WaveData  
{  
    public MonsterSpawnData[] monsters;  
    public bool hasBoss;  
    public string bossType;  
  
    public WaveData(MonsterSpawnData[] monsters, bool hasBoss, string bossType)  
    {  
        this.monsters = monsters;  
        this.hasBoss = hasBoss;  
        this.bossType = bossType;  
    }  
}  
  
[Serializable]  
public class MonsterSpawnData  
{  
    public string monsterType;  
    public int spawnCount;  
  
    public MonsterSpawnData(string monsterType, int spawnCount)  
    {  
        this.monsterType = monsterType;  
        this.spawnCount = spawnCount;  
    }  
}
 
  • 스테이지 안에 웨이브들 안에 몬스터들

스탠다드 반 강의 (주제 : 디버깅)

오류의 종류

  • 컴파일 오류 : 컴파일 자체가 안됨 (타입 불일치)
  • 논리 오류 : 구동이 되기는 하는데 의도랑 다른 결과
  • 런타임 오류 : 실행할 때 발생하는 잘못된 연산 (배열 인덱스 오버플로우)
  • 예외 오류 : 예상치 못한 상황 발생 (try catch 처리)

대표적인 오류

  1. NullReferenceException
  2. IndexOutOfrangeException
  3. MissingComponentException
  4. Syntax Error

중단점 찍는법

  • F9 누르면 그 줄에 중단점이 찍힘

중단점에 조건을 거는 법

  • 중단점 우클릭하고 조건 넣으면 됨
  • 조건식 말고도 적중 횟수로 써먹을 수도 있긴 함
  • 한 번 적중하면 그 다음에는 중단 안하게 할 수도 있음

중단점으로 콘솔창을 쓰는법

  • 출력 창에 메시지 표시 쓰면 출력창에 뜸. (Unity 콘솔 아님)

씬 확인

  • 디버그 > 창 > 지역 탭 열면 보임 (VS 기준)

조사식

  • 원하는 식이 있으면 조사식에 쓰면 됨

주의

  • 중단점 많이 찍으면 느려짐
  • 중단점 탭이 따로 있어서 거기서 삭제해도 됨