
오늘 학습 키워드
유니티 심화
오늘 학습 한 내용을 나만의 언어로 정리하기
시네머신
-
카메라 제어 시스템
-
메인 카메라에 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 처리)
대표적인 오류
- NullReferenceException
- IndexOutOfrangeException
- MissingComponentException
- Syntax Error
중단점 찍는법
- F9 누르면 그 줄에 중단점이 찍힘
중단점에 조건을 거는 법
- 중단점 우클릭하고 조건 넣으면 됨
- 조건식 말고도 적중 횟수로 써먹을 수도 있긴 함
- 한 번 적중하면 그 다음에는 중단 안하게 할 수도 있음
중단점으로 콘솔창을 쓰는법
- 출력 창에 메시지 표시 쓰면 출력창에 뜸. (Unity 콘솔 아님)
씬 확인
- 디버그 > 창 > 지역 탭 열면 보임 (VS 기준)
조사식
- 원하는 식이 있으면 조사식에 쓰면 됨
주의
- 중단점 많이 찍으면 느려짐
- 중단점 탭이 따로 있어서 거기서 삭제해도 됨