2025/03 16

[Unity/TIL] Grid Building 시스템 만들기 | 트러블 슈팅: 위로 쌓아지지 않는 문제, Grid의 경계면에서 Cell이 의도대로 선택되지 않는 문제 해결

게임에서 자주 볼 수 있는 기능인데, 맞춰진 격자에 맞춰 물건을 배치할 수 있도록 규격을 제시하는 크래프팅 시스템을 만들고 싶었다. 우선 C++로 타일맵 시스템을 만들었던 기억을 되짚어보며 직접 계산할 방법을 떠올려보았다. 임의로 Grid 한 Cell의 크기를 설정하고, 마우스 포인터의 위치를 Cell 크기에 기반한 계산을 통해 몇번째 Cell인지 알아낼 수 있도록 하려고 했다. Cell의 Index를 구하면 [중심값 + Index.x * Cell 크기] 같은 식으로 중심의 point를 알 수 있다.  그런데 유니티에서 Cell의 Index 계산과 특정 Cell의 중심점의 World Position을 구하는 기능을 제공하는 컴포넌트가 있다.!! 바로 Grid이다. 유니티에서는 타일맵 에디터를 제공하는데,..

[Unity/TIL] 인벤토리 / 아이템 구현, FSM, AI Navigation 복습

인벤토리 / 아이템 구현슬롯형 인벤토리를 만들었다.마우스 호버 시 아이템 정보를 보여주고 클릭 시 장착된다. 아쉬운 점아이템은 Scriptable Object로 관리했으나 데이터로서 관리되지 않고 아이템에 각각 붙어있다..ㅎ  이렇게 하면 데이터를 아이템마다 따로 복사해준 것이다. 한 아이템 데이터가 3개씩 3종류니까 SO가 총 9개 복사되어 있는 거다. 원래 SO들을 어딘가에 한 번 로드해두고 참조하는 식으로 해야 효율적이다.!!=> 데이터 개수만큼만 로드하고, 참조해서 사용하기. 애초에 오브젝트 풀도 없이 씬에 아이템 9개를 뿌려놓고 아이템이 사라지고 나면 알아서 3초뒤에 리젠되도록 만들었다.UI 구조플레이어 AI 만들기플레이어가 아이템을 스스로 먹으러 찾아 다니도록 만들고 싶었다. AI Naviga..

[Unity/TIL] UI에 바로 적용할 수 있는 기본 제공 이벤트 핸들러 (Hover, Exit, Down, Drag, ...)

IPointerEnterHandler, IPointerExitHandler  각각 Hover될 때와 커서가 나갈 때 호출됨. 인터페이스를 상속받고 구현하면 끝이다.EventSystem + Graphic Raycaster + Canvas 기반 UI에서만 동작하는 이벤트 인터페이스다. 예시... 너무 간단public class ItemSlot : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler{ public void OnPointerEnter(PointerEventData eventData) { // 아이템 정보창 보여주기 Debug.Log("마우스 호버"); Inventory.ShowItemDesc(Ite..

[Unity/TIL] 렌더링 파이프라인과 URP에 대하여 | 에셋이 분홍색으로 보이는 현상

렌더링 파이프라인 쉽게 말하자면 오브젝트를 화면에 그리는 과정을 담은 시스템이다. 공장의 파이프라인처럼 앞 단계가 잘 완료되면 다음 단계를 실행하는. 그런 구조가 담긴 시스템이다. 아래는 DirectX의 렌더링 파이프라인 과정이다. 점의 정보를 가져오는 것부터 시작해서 행렬 계산을 이리저리 해서 눈에 보이게 하는 과정이다 보니, 세부적으로 많은 과정이 존재한다. 하지만 유니티를 쓰면 유니티가 알아서 해주죵? 🍯🐝크게 세가지로 보자!! 1. Culling절두체에 걸리는 것만 그려주고, 절두체 밖에 있는 것들은 그려지 않는다. 설정에 따라 다 그리거나 안 그릴 수 있다. 2. Rendering 카메라 절두체가 찍은 오브젝트들을 평면 화면에 그려주는 작업이다. 3. Post-processing일종의 필터라..

[Unity/TIL] 시네머신 활용 정리 (추적, 전환, 흔들림)

시네머신시네머신은 유니티에서 카메라를 제어하라고 만들어준 시스템이다. 코딩 없이 카메라 이동, 전환, 흔들림, 추적 가능.배우고 보니 시네머신이 여태 내가 필요했던 것들을 해주더라.!!  여러 가상 카메라를 두고 각 가상 카메라마다 독립적인 속성을 가지게 하고, 이 가상 카메라들을 이용해서 다양한 효과를 줄 수 있다. Blend List Camera : 여러 개의 가상 카메라를 두고 그 카메라들의 전환을 도와줌. State Driven Camera : 애니메이션 상태에 따라 전환. ex) 캐릭터를 머리 위에서 찍다가 이동할 때는 등이 보이게 찍는다든지Dolly Camera : 카메라가 레일을 지나가며 찍게 함. 오프닝 씬 등의 연출을 도와줌. (그 레일을 Dolly 라고 함) ClearShot : 플레이..

[Unity/TIL] 3D 퍼즐 플랫폼 게임 - 팀 프로젝트 일지 (3) | World Space UI 클릭 이벤트 발생 안함 해결, 제네릭 데이터 로더 구현, 데이터 AES 암호화해서 json으로 입출력

World Space의 UI 클릭 이벤트 발생하지 않는 문제 해결두가지 퍼즐 구현 마무리를 하고 다른 파트와 합쳐보다가 문제가 발생했다.현상 : Player를 추가하고나면 World Space에 있는 UI에 클릭이 안된다. World Space에 있는 UI 캔버스의 EventCamera는 스크립트에서 동적으로 할당하기 때문에 이 문제는 아닌 것 같았다. 찾은 원인 : 커서 Lock모드 PlayerController에서 커서의 lockState를 Locked로 세팅해주고 있는데, EventSystem은 보통 마우스가 움직일 때 UI 감지를 업데이트 하는데 Locked 상태에서는 마우스 이동이 없다고 판단될 수 있다고 한다. 해결 :  클릭 감지 시 UI 이벤트 수동으로 실행 이벤트 감지를 못하는 것이 원인..

[Unity/TIL] 3D 퍼즐 플랫폼 게임 - 팀 프로젝트 일지 (2)

목차- 물리 버튼 제작 마무리  ㄴ Spring Joint의 프로퍼티- Player ↔ 오브젝트 상호작용 조작감 개선  ㄴ 픽업 위치 개선  ㄴ 픽업 오브젝트 회전 기능 추가물리 버튼 제작 마무리이전 글 - 2025.03.13 - [프로젝트 일지/Unity] - [Unity/TIL] 3D 퍼즐 플랫폼 게임 - 팀 프로젝트 일지 (1)어제 실제 세계의 버튼과 같은 구조로 Spring Joint를 달아서 사용할 것 같다는 결론이 났었는데, 문제가 생겼다. 그렇게 하면 연결된 두 물체가 한 물체로 여겨져서, 서로 충돌 이벤트가 발생하지 않는다.버튼의 바닥부분과 뚜껑 사이에 스프링이 있고, 무게에 의해 뚜껑이 내려가면 바닥면과 충돌하면 버튼이 눌린 것으로 인식되어야 하는데 OnCollisionEnter에 들어오..

[Unity/TIL] 3D 퍼즐 플랫폼 게임 - 팀 프로젝트 일지 (1)

어제부터 새로운 팀 프로젝트를 시작했다. 와이어프레임을 그려보며 회의를 시작했다가, 아이디어를 뻗어나가며 계획을 완성시켰다. 와이어프레임은 포문을 열어주는 정도의 역할이고 사실상 브레인스토밍식의 회의를 한 것 같은데, 다양한 게임 경험을 공유하는 것 같아서 재미있었다. 이번에는 피그마가 아닌 miro를 사용해서 문서를 작성하였는데 아주 좋은 툴을 알게 된 것 같다!! miro에서 아이디어 회의, Git 규칙, 와이어프레임, 클래스 설계도 등을 모두 작성하였다. 클래스 설계는 자세히 설계하지는 않고 파일 depth를 설계한 것에 가까웠다. 초기에 필요할 스크립트와 폴더가 정리된 채로 시작하는 정도만 해도 작업이 수월하게 느껴졌다. 이번 팀 프로젝트에서는 퍼즐 시스템 두 가지를 담당하여 개발하고 있다. 굉...

[Unity] 코루틴 활용 기록

코루틴은 작업을 다수의 프레임에 분산하는 메서드다. 즉 시간이 걸리는 작업을 프레임을 멈추지 않고 실행할 수 있도록 하는 기능이다. 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드다.=> 한 프레임에서 모든 작업을 처리하지 않아도 되고, 연속적으로 작동하도록 할 수 있다. 코루틴과 함께 yield 키워드를 사용하여 특정 조건이나 시간이 걸릴 때까지 대기시킬 수 있다.   코루틴은 스레드가 아니다. 겉보기에 멀티 스레드마냥 보이지만 사실 단일 스레드로 동작하는 동기식이다.    코루틴 사용 예시 1. 코드 사이에 몇초 대기시키기코루틴을 배운 이후로는 Invoke 대신 많이 사용하게 되는 것 같다 void Start(){ StartCoroutin..

[Unity/TIL] 3D 개인 프로젝트 일지 (3) - 짭테런 후회와 마무리

이번 프로젝트를 하면서 나의 첫 선택에 대한 후회가 많았다. 발제 문서를 읽고 ALTF4나 온리업 류의 게임을 만들어야 한다는 생각에 흥미가 느껴지지 않아서 그대로 따르지 않으려고 했다. 분명 다른 방식으로 필수 기능 가이드를 따를 방법이 많았을 텐데, 그당시에는 다른 걸 만들어야 겠다는 생각밖에 들지 않았다. 하지만 이때문에 시간이 더 지체되었고 그렇다고 멋진 퀄리티로 완성한 것이 아니라서 후회가 된다. 반성의 의미로 후회를 글로 남기려고 한다.  필수 기능을 모두 담을 수 있으면서 나의 흥미를 이끌만한 게임을 직접 기획하기엔 능력도, 여유도 부족했다. 보통 학습용 프로젝트에서는 에셋을 찾다가 에셋에 기획을 맞추는 일이 잦은데, 이번에는 고집이 생겼는지.,.. 프로젝트에 애정을 붙이고 싶어서 억지로 좋..