728x90
반응형
SMALL

전체 글 99

Unity URP와 유한 상태 머신(FSM)에 대해

오늘은 먼저 Unity의 URP (Universal Render Pipeline)에 대해 학습했다.URP는 Unity의 Scriptable Render Pipeline 중 하나로, 다양한 플랫폼에서 높은 성능과 품질을 제공할 수 있도록 설계된 렌더링 시스템이다.Scriptable Object처럼 스크립트로 제어가 가능하기 때문에 이름이 이렇게 붙었다고 한다. 다음은 URP의 주요 특징이다. Cross-Platform Compatibility모바일, PC, 콘솔, VR/AR 등 Unity가 지원하는 대부분의 플랫폼에서 작동한다.Performance and Scalability저사양 디바이스에서도 원활하게 돌아갈 수 있도록 최적화되어 있고, 그래픽 퀄리티 조절도 쉽다.Modern Rendering Featu..

TIL 2025.07.16

Firebase를 이용한 회원가입 및 로그인 기능 구현

오늘은 Firebase Authentication을 이용해 이메일 기반 회원가입 및 로그인 기능을 Unity에서 구현해봤다.학습자료로는 유튜브 오늘코딩의 강의를 참고하였다. 우선 Firebase Unity SDK 다운로드 및 import를 하고,google-services.json을 Assets/StreamingAssets 경로에 배치했다. 그리고 스크립트를 작성하여 회원가입, 로그인, 로그아웃 기능을 구현했다. 우선 매니저 스크립트를 작성하여 싱글톤화 하였다. 그리고 초기화 작업에서 Firebase 인증 시스템 객체를 생성하고,로그인 상태 변경 시 콜백을 등록하였다. 그리고 Firebase의 StateChanged 이벤트로 로그인/로그아웃 상태를 감지하고,로그인 여부에 따라 UI 반영(outputTe..

TIL 2025.07.01

게임 개발자 입사지원을 위한 준비

오늘부터 입사지원을 위한 준비를 시작하였다.캠프가 끝났지만 캠프에서 이력서 작성, 코칭, 면접 코칭 등을 도와준다해서 강의를 지급받고 도움을 받았다. 이전에 구직활동하던 회계분야에서는 이력서를 다 작성했었지만 이제는 진로를 변경해 나는 게임 개발자 이력서를써야했기에 구조도 달랐고, 막막했다. 하지만 캠프가 끝난지 얼마 안된 시점에서 이력서를 작성하라하니 그래도 나름 술술 작성이 됐던 것 같다. 내가 여태까지 캠프를 진행하며 꾸준히 TIL을 썼는데 이것도 도움이 될지는 모르겠다.최대한 그래도 나의 강점을 잘 살리고, 꾸준함을 어필해서 취업을 성공해보자 아래는 내가 작성한 간단한 자기소개이다. - 자기소개비전공자로서 사회생활을 회계팀에서 시작했지만, 어린 시절부터 꾸준히 품어온 게임에 대한 열정을 실현하기 ..

TIL 2025.06.05

Unity URP 퀄리티 설정

오늘은 설정창에 있는 그래픽품질 설정을 하다가 URP( Universal Render Pipeline) 퀄리티 설정을 알게 됐다.Unity의 URP에서는 각 퀄리티 레벨마다 그래픽 처리 방식을 세부적으로 설정할 수 있다.이 설정은 Edit > Project Settings > Quality에서 퀄리티 레벨을 나누고, 각 레벨별로 URP Asset을 연결해서 적용된다. 다음은 URP Asset 구조이다. - Universal Render Pipeline Asset전체적인 그래픽 품질 설정예: MSAA, 그림자 거리, 렌더 스케일 등 - Renderer Feature 포함 Renderer Asset각 카메라나 레이어에 대해 어떤 렌더링 기능(AO, 그림자 등)을 사용할지 정의예: SSAO, Bloom, Ou..

TIL 2025.05.30

트러블슈팅 - 사이렌 관련

나는 다음 주 월요일 최종발표회를 앞두고 트러블슈팅을 발표해야해서 내가 작업하며 일어난 트러블슈팅을 정리했다. 우선 트러블슈팅이란?트러블슈팅(Troubleshooting)은 말 그대로 문제를 찾아서 해결하는 과정을 뜻한다.소프트웨어 개발, 하드웨어, 네트워크, 게임 개발 등 어떤 기술 분야에서든 필수적인 작업이다. 어떤 문제가 발생했냐면 사이렌이 한 번 울리면 다른 사이렌들까지 6분까지 안울리게 코딩을 해놨었다.그래서 한 번 울리고 난 뒤, 6분이 지나기 전에 게임이 오버가 되면 그 뒤부턴 영원히 사이렌이 울리지 않는 버그를 마주쳤다. 이것을 해결하려던 찰나 마침 사이렌 기획이 바꼈다. 이제 한 번 울리면 그 다음부턴 그 사이렌은 안울리고, 다른 사이렌들은상관없이 닿으면 또 울리는 구조로. 그래서 코드의..

TIL 2025.05.29

점프공격하는 좀비 만들기

나는 오늘 점프해서 공격하는 좀비 만들었다.점프해서 공격하는 애니메이션은 외부에서 가져와서 애니메이션은 쉽게 해결했는데.데미지 처리와 이동하는 값을 조정을 해야해서 애를 먹었다.어떻게 했는지 코드로 보자 우선 누가 맞을지를 정해야하기때문에 레이어 마스크를 선언한다.그리고 Enter에서 쿨타임과 bool 값을 관리해준다. 그리고 Execute에서 타겟에게 다가가면서 점프를 하는 로직이 작성돼있다. 그리고 마지막으로 가장 중요한 Attack함수이다.Attack함수는 애니메이션에 이벤트로 등록을 해놨는데어떤 방식이냐면 콜라이더를 만들어서 그 안에 들어온 애중에 내가 선택한 레이어를 달고있는 오브젝트면 데미지를 입히는 것이다.그래서 foreach로 콜라이더 안에 들어온 애를 찾아서 데미지를 입힌다.이상 점프공격..

TIL 2025.05.28

몬스터 상태 전이 디버깅하면서 느낀 점

오늘은 Fusion 기반 상태 머신 구조에서 몬스터가 계속 뛰기만 하는 버그를 잡는 데 시간을 꽤 썼다.결과적으로 코드엔 큰 문제가 없었는데, 조건들이 너무 빡빡해서 공격 상태로 전환할 수 없는 상황이었던 거였다. 처음엔 단순히 "로직이 잘못됐나?"라고 생각했다.여러 상태가 있는데도 Run만 반복해서, 상태 전이가 아예 안 되는 줄 알았다. 근데 디버깅하면서 하나하나 찍어보니1. 거리 조건은 미세하게 안 닿고2. 스킬 쿨다운도 전부 돌고 있어서결국 선택할 수 있는 패턴이 없는 상황이었다.결과적으론 문제 없는 코드였는데, 조건을 너무 빡빡하게 짠 게 문제였다. 추적 로직이 특정 조건 안에만 들어있어서, 몬스터가 멈춰 있는 느낌도 있었는데그걸 Execute()의 공통 영역으로 빼주니까 움직임이 훨씬 자연스러..

TIL 2025.05.27

Unity AudioManager 구현

Unity에서 BGM과 SFX를 통합적으로 관리할 수 있는 AudioManager 클래스를 만들어봤다.이 시스템은 다음과 같은 기능을 한다.배경 음악 재생 / 정지효과음 재생 / 정지효과음 랜덤 재생 (여러 클립 중 하나)마스터 / BGM / SFX 볼륨 조절 (AudioMixer 사용)싱글톤 패턴 기반의 전역 오디오 매니저 Bgms: 배경 음악 종류를 나열Sfxs: 효과음 종류를 나열Enum을 사용함으로써 코드에서 직관적으로 사운드를 지정 가능하다. BgmClip: 하나의 배경음 클립과 그 타입을 묶음SfxClip: 여러 개의 효과음 클립을 리스트로 묶음 → 랜덤 재생 지원[Serializable]을 통해 인스펙터에서 리스트 편집 가능SfxClip을 랜덤 재생을 지원한 이유는 좀비의 공격 사운드, 플레..

TIL 2025.05.26

ESC키로 메뉴판, 설정창 끄게 하기

나는 ESC키로 메뉴판을 키게 만들었었다.ESC키로 메뉴판을 키고, 그 다음으로 설정창을 버튼클릭으로 키게하고, 설정창 끄는 것은 버튼 클릭으로 끄게 했다.그런데 유저피드백을 실행한 결과, ESC키로 설정창도 끄게 했으면 좋겠다. 라고 피드백이 들어왔다.이렇게 켜서 취소를 클릭해서 닫는 구조였다.그래서 리팩토링을 실시했다. 원래는 이렇게 ESC키를 눌렀을때 만약 메뉴팝업이 꺼져있다면 메뉴팝업을 켜주고 꺼져있다면 꺼주는 구조였다.그런데이렇게 안에 if문을 추가했다.메뉴팝업이 켜져있다면에서 if문을 추가해서 유아이셋뷰, 즉 설정창이 켜져있다면 설정창을 꺼라 라고 실행했다.List의 함수를 사용했는데 어떻게 리스트를 사용할 수 있었냐면 바로 UIManager가 이런 구조였기 때문에 가능했다.UIList에 있다..

TIL 2025.05.23

UIManager로 UI 동적 생성하기

오늘은 내가 짯던 코드 중 UIManager에 대해 소개해보겠다. 먼저 모든 UI들의 부모인 UIBase를 작성해준다.필요한 것들을 우선 재정의할수 있게 함수를 virtual로 작성해준다그 다음 UIManager이다. Show함수는 리소스폴더에 UI폴더안에 있는 애들 중 이름을 검색해서 찾아서 보여준다. 하지만 string으로 검색하면오타가 날 수 있고, 신경써야할 것이 많기때문에 제네릭을 활용해서 클래스명으로 찾을 수 있게 하였다. 그 다음은 Hide함수이다. 얘는 매우 간단하다. UIList안에 있는 애들을 검색해서 찾은 다음 그 오브젝트를 꺼주는 것이다. 보통이라면 이 UIManager를 싱글톤으로 사용하면 되지만나는 싱글톤을 총 관리해주는 Global이라는 클래스를 따로 만들어서 구현해주었다.이렇..

TIL 2025.05.22
728x90
반응형
LIST