전체 글 238

[URP] Dissolve 효과로 On/Off 상태 구현하기

3D 캐릭터의 동작에 따라 캐릭터가 쥔 무기가 나타나거나 사라지는 연출을 구현할 것이다. 단순히 Mesh를 활성화/비활성화하여 구현할 수도 있겠지만, URP Shader를 사용하여 자연스러운 Fade 효과를 입혀볼 것이다. - Universal RP 패키지 설치 필요 기본적인 노드 설정은 위와 같다. - Blackboard에 float형 변수 추가- Fragment에 Alpha, Alpha Clip Threshold 노드 추가- Alpha에 Simple Noise Out 연결- Alpha Clip Threshold에 Blackboard 변수 연결Texture의 알파값이 Simple Noise의 노이즈 텍스처로 대체되면서 픽셀마다 다른 알파값을 가지게 된다. Alpha Clip Threshold의 값이 바..

Unity/Shader 2026.10.23

HashSet과 전투 상태 관리

실시간 전투가 있는 게임이라면, 몬스터와 전투하면서 플레이어가 현재 전투 상태인지 아닌지에 따라 기능을 제어할 필요가 있을 것이다. 공격 버튼이 특정 조건을 만족하면 상호작용 버튼으로 기능이 토글됨에 따라, 전투 시 상호작용 버튼으로 바뀌지 않도록 조건을 추가할 필요가 있다. 전투 상태를 판단하기 위해서는 적의 플레이어 인식 여부가 필요하다. 실시간 전투인 이상 다수와의 전투가 대부분이므로 적이 플레이어를 인식했는지를 묶음으로 관리해야 한다. 이를 HashSet으로 관리해보자.HashSet은 특정 순서 없이 고유한 요소를 저장하는 컬렉션이다. 사용 시 System.Collections.Generic; 을 선언해야 한다. 삽입 순서를 유지하지 않지만, 연산이 O(1)로 빠르다. 비교 항목ListHashSe..

시스템 구현 2026.10.22

Instantiate 시 부모 설정하기

Instantiate하면서 부모 계층을 설정할 때 밑의 오류를 가끔 보게 될 것이다.1) Cannot instantiate objects with a parent which is persistent. New object will be created without a parent.2) Setting the parent of a transform which resides in a Prefab Asset is disabled to prevent data corruption 첫 번째 오류가 났을 때의 코드이다. GameObject clone = Instantiate(weaponModel, modelTransform);modelTransform은 해당 코드를 포함한 스크립트의 자식 transform이..

Unity/버그 잡기 2026.10.06

enum의 특정 값만 인스펙터에 노출하기

최대한 모든 enum 값에 범용적으로 사용할 수 있도록 설계해 보았다. 아직 에디터 쪽은 공부가 필요해서 AI의 힘을 빌리긴 했지만...사용 시 EnumSubSetAttribute()를 사용하여, 노출할 enum값을 열거해주면 된다.EnumSubSetDrawer가 EnumSubSetAttribtue의 값을 보고 인스펙터에 그려내는 역할이다. 그러므로 에디터 전용 스크립트인 EnumSbuSetDrawer.cs는 Editor 폴더에 들어가 있어야 한다. [EnumSubSetAttribute(EStatType.PhysicalStat, EStatType.TimeStat, EStatType.ScienceStat, EStatType.FaithStat)] [SerializeField] private ESt..

Unity/Editor 2026.10.06

FBX에 포함된 애니메이션의 이벤트 추가

Mixamo 등에서 다운로드 받은 애니메이션은 fbx 형식으로 존재하는데, Animation 창에서 확인하면 Read-only로 인식하여 수정할 수 없다. 그럴 경우에 fbx 애니메이션의 인스펙터창에서 이벤트를 추가해야 한다. fbx 미리보기 창의 재생바와 Events의 재생바는 연동되어 있다. 미리보기 애니메이션을 보면서 원하는 위치에 이벤트를 추가하면 된다. 이벤트 버튼이 너무 조그맣게 있어서 찾는 데 오래 걸리긴 했다... 시야가 좁다. 이벤트의 Function란은 Animator가 붙어있는 오브젝트의 스크립트에 동일한 이름의 함수가 포함되어 있어야 한다. using System.Collections;using System.Collections.Generic;using UnityEngine;p..

Unity/Unity3D 2026.09.23

[Mixamo] 믹사모에서는 멀쩡했는데 유니티로 오니까 발목이 꺾여요

Mixamo에서 다운로드 받은 애니메이션을 적용하면 거의 90%의 확률로 발목이 자유로워지는 사태가 발생한다. Mixamo에서는 정상적으로 잘만 출력되는데 Unity로 넘어와서는 왜 그럴까? 대부분 이런 오류를 피하고자 Copy From Other Avatar 옵션으로 뼈대를 맞출텐데, 아바타를 넣어주면...방심한 자에게 오류를 하나 더 안겨준다. 이는 Mixamo의 애니메이션 파일 최상위 이름과 다른 아바타의 최상위 이름이 서로 일치하지 않아 발생하는 오류이다. 그래서 Blender에서 이름을 수정하여 다시 가져와봐도 해결되지 않을 때가 더 많다. 이를 해결하기 위한 방법은 Mixamo에서 플레이어 애니메이션을 with skin 옵션으로 추출해 그 뼈대를 사용하는 것이다. 이 역시 임시방편이긴 하지만..

Unity/버그 잡기 2026.09.21

인터페이스를 이용한 UI 버튼 토글

평소에는 공격 버튼으로 있다가, 특정 오브젝트를 감지하면 상호작용 기능으로 바뀌는 버튼을 제작하려고 한다. 버튼 입력을 SO로 제작한 이벤트로 받아오기 때문에, 공격 이벤트에서 상호작용 이벤트로 바꿔 받아야 한다는 것이 핵심이다. using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;public class ButtonInteract : MonoBehaviour{ [SerializeField] private UIEventSO uiPressedEvent; private void OnEnable() { Pl..

시스템 구현 2026.09.21

[HP바] 슬라이더 여백 제거하기

슬라이더로 HP바를 구현할 때 소소하게 신경쓰이는 점은 background와 fill 영역이 조금씩 어긋난다는 것이다. HP바는 유저가 직접 조작할 수 없으므로 대부분은 핸들 슬라이드를 제거할 텐데, 그러면서 여백이 생기거나 fill이 background를 벗어나게 된다. fill이 핸들 슬라이드와 똑같으면 끝과 가까울 때 영역이 구분되지 않으니 핸들 슬라이드랑 겹치지 않도록 설계한 게 아닐까 싶다. Background, Fill Area, Fill만 조정해주면 된다. 그것도 rect transform의 위치를 0으로 입력해주기만 하면 끝이다.

Unity 2026.09.14

조이스틱과 캐릭터 이동

모바일에서의 캐릭터 이동은 대부분 가상 조이스틱으로 처리된다. 조작에 따라 조이스틱이 고정이 될 수도 있고, 터치하는 위치에 생성되는 가변형일 수도 있다. 기본적인 캐릭터 이동을 구현해 보자. 조이스틱은 다음과 같은 기능을 포함한다.레이캐스트 구역의 터치를 받아 활성화조이스틱과 캐릭터 이동 연동기울기에 따른 속도 변화 1. 조이스틱 조작using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;public class VirtualJoystick : MonoBehaviour, IPointerDownHandler..

Unity 2026.08.28