목차
유니티 심화 주차 팀 편성 및 프로젝트 준비
오늘 새 팀으로 편성이 되었다!
이번에는 베이직은 뭔가 재밌고 신기해보이는 구현하지 못하면 못 나가는 방에 갇히게 되었고,
스탠다드와 챌린지 반은 개발 3~4명이 팀이 되어 기획 2명과 함께 팀 프로젝트를 진행하게 된다.
개인적으로 구못방 참여하고 싶었으나, 기획/개발 분업을 한 채로 진행하는 것도 기대가 크다!
개인 과제로는 인벤토리 만들기와 3D 방치형 게임 만들기가 있는데, 어떤 것을 할지 고민이 크다.
인벤토리 부분은 지난 팀 과제에서 진행을 했었지만! 3D 방치형 게임은 조금 벅찰 것 같다...
중간 단계가 있었으면 좋았을텐데라는 생각이 든다.
일단 강의를 다 들어보고 결정해봐야겠다.
Cinemachine
코딩 없이 카메라의 이동, 전환, 흔들림, 추적 등을 제어하는 Unity의 카메라 제어 시스템이다.
Cinemachine 패키지를 설치한 후 사용할 수 있다.
주요 기능으로는
- Virtual Camera: 여러 가상 카메라를 설정하며, Priority 값으로 자동 전환을 구현한다.
- Follow & Look at: 특정 대상(예: 플레이어)을 자동으로 추적하거나 바라보도록 설정한다.
- Cinemachine Confiner 2D: 카메라 이동 범위를 지정된 영역(Collider) 내로 제한한다.
- Inpulse: 폭발이나 피격 시 카메라 흔들림 효과를 적용한다.
- Transition: Priority 값 조절로 카메라 전환을 자연스럽게 연결한다.
- Cinemachin Brain: Main Camera에 추가되며, Virtual Camera의 출력을 받아 화면에 표시하는 관리자 역할을 한다.
Follow Camera (추적 카메라)
특정 대상을 따라다니는 카메라를 구현하는 기능이다.

Cinemachine Virtual Camera 컴포넌트의 Follow 슬롯에 Player 오브젝트를 연결한다.
Body 설정에서 Framing Transposer를 사용하여 추적 방식을 조정한다.
Cinemachine Confiner 2D
카메라가 지정된 영역을 벗어나지 않도록 이동 범위를 제한하는 기능이다.


Confinder 2D는 Cinemachine Virtual Camera에 추가하는 확장 기능(Extension) 컴포넌트이다.
Bounding Shape 2D는 카메라 영역을 제한할 Polygon Collider 2D (또는 다른 Collider 2D) 오브젝트를 연결한다.
이 콜라이더는 IsTrigger가 True여야 하며, 카메라 영역보다 크게 설정한다.
Camera Shake (카메라 흔들림)
특정 이벤트 발생 시 Cinemachine Virtual Camera의 Noise 기능을 스크립트로 제어하여 화면에 진동 효과를 주는 기능이다.
강의에서는 아래와 같이 진행함.
Virtual Camera의 Noise 옵션을 Basic Multi Channel Perlin으로 설정한다.
Noise Profile을 6D Shake로 설정한다.
Amplitude Gain과 Frequency Gain은 모두 0으로 둔다. (추후 코드에서 재설정)
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_FrequencyGain = 0;
perlin.m_AmplitudeGain = 0;
}
}
CinemachineBasicMultiChannelPerlin 컴포넌트를 가져오고, ShakeCamera 함수를 만들어 호출 시 Amplitude와 Frequency를 설정하여 흔들림을 시작한다.
Update() 함수에서 시간을 감소시켜 시간이 다 되면 StopShake()을 호출하는 방식으로 Gain 값을 0으로 재설정해준다.
위 스크립트를 GameManager에서 호출하는 방식으로 진행함.
카메라 전환 (Virtual Camera Priority)
씬에 여러개의 virtual camera가 있을 때 우선순위를 조절하여 카메라 간의 부드러운 전환을 구현하는 기능이다.
Cinemachine Brain은 가장 높은 Priority 값을 가진 Virtual Camera의 출력을 메인 카메라에 보여준다.
두 카메라의 Priority가 바뀔 때, Cinemachine Brain의 Default Blend 설정에 따라 자연스럽게 화면이 전환된다.
강의에서는 아래와 같이 진행했다.


새로운 카메라를 생성하고 Priority 값을 다른 카메라보다 낮게 설정한다.
새 카메라 오브젝트에 Collider를 추가하고 IsTrigger를 True로 설정하여 영역을 만든다.
스크립트(VirtualCameraController.cs)를 생성하여 OnTriggerEnter2D 이벤트가 Player에 의해 발생할 때 virtualCamera의 Priority 값을 높게 설정하여 카메라를 전환한다.
OnTriggerExit2D에서는 다시 낮게 설정하여 이전 카메라로 복귀 시킨다.
CinemachineBrain에서 Default Blend 혹은 Custom Blends를 통해 전환 효과를 변경할 수 도 있다.
Unity - Visual Studio 에디터 자동완성 깨짐


CinemachineVirtualCamera가 상단 좌측 이미지와 같이 그냥 흰색으로 보였었다.
자동 완성 및 코드 가독성을 위해 상단 우측처럼 초록색(클래스)으로 보이길 바랐다.
패키지를 새로 받았으니 우선은 유니티를 종료했다가 켜보고, 라이브러리도 삭제해봤지만 작동하지 않았다.
Generate .csproj files for

이미지와 같이 모두 선택하고 Regenerate project files를 눌러주었다.
나와 같이 Cinemachine만 그런 경우 하단의 Player projects만 체크하고 regenerate project files를 눌러도 된다.
Update Visual Studio Editor in Unity Packages

또한 비주얼스투디오 버전이 최신이 아니기에 업데이트도 해주었다.
결론
두 방법을 모두 썼지만 안되다가 유니티 껐다가 켰다가를 반복하니 또? 어쩌다? 됨?
TIL을 쓰면서 Generate .csproj files for를 이전처럼 돌려봤는데 다시 안되었다.
어떤 녀석이 범인인가 하고 하나씩 켰다 껐다 해봤지만, 결론은 모두 체크하고 regenerate해야 된다는 것을 발견했다.


이제까지 참을성이 없어서... 초록색으로 변하는 시간을 기다리지 못했다.
제일 하단의 Player projects만 체크하고 (상단의 세개는 기존에 선택되어있었음) regenerate 해도 된다!
Unity가 필요한 모든 스크립트 및 에셋 정보를 .csproj 파일에 포함시켜야 Visual Studio가 이를 인식하고 IntelliSense를 제공할 수 있기 때문인 것 같다.
느낀점
기획 팀에서 자주 오셔서 다음주 팀 프로젝트에 대한 의견을 나누고 방향을 잡았다.
레퍼런스 게임들을 뽑아주셔서 개발팀에게 선택지를 주셨고, 선택을 하고 난 뒤에는 개발에서 진행 할 수 있는 부분인지 아닌지를 점검하러 오셨다.
기획팀에서 실제 개발팀에서 개발할 수 있는 부분이 맞을지, 에 대해서 꼼꼼하게 체크하신다는 느낌이 강했다.
하지만 그 과정에서 내가 대답을 잘 했는지가 조금 걱정되긴 한다.
내가 섣불리 된다고 했다가 못하면 어쩌지, 그렇다고 다 안된다고 하기엔... 예전에 수많은 빠꾸로 상처 받은 병아리 기획자 시절이 생각나고... 그리고 무엇보다 나도 안해봐서 모르겠는데 어떡해요~~ㅠㅠ
내일 학습 할 것은 무엇인지
내일은 무조건 과제 시작해야겠다.
지금까지의 마음은 70% 방치형 게임, 30% 인벤토리 구현일 것 같다.
머리로는 3D 방치형 게임을 진행해야한다는 걸 알고 있지만, 3D가 싫다는 마음이 30%나 된다...
내일 아침에 일어나서 결정해봐야겠다.
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025AUG27] 3D 방치형 RPG Idle Adventure 2일차 (0) | 2025.08.27 |
|---|---|
| [내일배움캠프_2025AUG26] 3D 방치형 RPG Idle Adventure 1일차 + 팀의 위기.. (0) | 2025.08.26 |
| [내일배움캠프_2025AUG22] 팀 프로젝트 발표: 트러블슈팅 (0) | 2025.08.22 |
| [내일배움캠프_2025AUG21] 팀 프로젝트 5일차: Interaction 및 병합, 챌린지반 특강 (0) | 2025.08.21 |
| [내일배움캠프_2025AUG18] 팀 프로젝트 3일차: 장착관리 (0) | 2025.08.19 |