반응형

2025/03 11

Unity UI 최적화

📖 캔버스 분할 전략문제점단일 캔버스에서 하나의 요소가 변경되면 전체 캔버스가 더티(dirty) 상태가 됨수천 개의 요소가 있는 경우 성능 저하가 심각해질 수 있음해결 방법캔버스를 여러 개로 분할업데이트 빈도에 따라 분리 (정적/동적 요소 구분)중첩 캔버스 활용으로 계층적 구조 만들기동일한 Z값, 재질, 텍스처를 가진 요소들을 같은 캔버스에 배치 🖥️ 그래픽 레이캐스터 최적화주의점모든 입력 지점을 반복 검사하므로 오버헤드 발생불필요한 레이캐스트 체크는 성능 저하의 원인최적화 방법비대화형 UI 캔버스에서 그래픽 레이캐스터 제거정적/비대화형 요소의 레이캐스트 타겟 비활성화월드스페이스/스크린스페이스 카메라 모드에서 차단 마스크 신중히 사용  🎮 UI 요소 최적화피해야 할 상황큰 목록이나 그리드 뷰의 무분..

Unity 2025.03.30

Unity 캐릭터가 아닌 오브젝트의 Animation Retargeting

무기 에셋을 다운 받았는데, Rifle 1, 2 에셋에서만 Draw 애니메이션이 누락되어있는 문제가 발생했습니다.  Object의 Bone의 이름만 다른 상황에서 쓸 수 있는 방법입니다.  우선 필요한 애니메이션을 복사합니다.복사한 애니메이션을 폴더로 들어간 후, Text파일로 엽니다.  Ctrl + H를 눌러 bone의 이름을 바꿔줍니다. 모든 이름을 바꾸고 저장하면 사용이 가능한 애니메이션이 됩니다.

Unity 2025.03.30

Unity 트러블 슈팅 - NavMeshAgent가 NavMesh에 배치되지 않았다는 오류

🚀 Trouble-Shooting1. 문제 상황 발생NavMesh를 런타임중에 빌드한 후에, 몬스터를 배치하면 Agent가 NavMesh에 제대로 배치되어있지 않다는 오류가 발생함.  2. 원인 추론NavMesh 빌드 함수 호출 이후에 곧바로 몬스터 생성 함수가 호출되는 것을 확인.NavMesh가 제대로 완성되기 전에 몬스터가 배치된 것은 아닐까 추측했습니다.Invoke함수를 통해 3초 정도 늦게 생성되도록 했지만, 문제는 해결되지 않았습니다.   3. 해결 방안3.1 첫번 째 해결법인터넷 검색을 통해 같은 문제를 겪고 있는 사람을 찾았고, Awake에서 naveMesh.enable을 false로 해주고 0.025초 뒤에 true로 변경해주면 정상적으로 작동한다는 것을 확인했습니다. 실제로 적용해보니 ..

Unity 2025.03.26

Unity Package Manager - Git URL Error (No git executable was found)

유니티 패키지를 깃허브 링크로 다운 받을 때, 에러가 발생하는 경우가 있습니다. "No Git Executable was found"해당 에러는 환경 변수에 Git.exe 파일 경로가 없어서 발생하는 에러입니다.  에러 해결 방법1. 우선 현재 사용중인 깃허브의 버전을 확인합니다. 2. 깃허브가 설치된 경로를 저장합니다.C:\Users\사용자명\AppData\Local\GitHubDesktop\app-버전\resources\app\git\cmd  3. 해당 경로를 환경 변수에 등록해줍니다. - 고급 시스템 설정 보기 -하단의 환경 변수 클릭 - 환경 변수 창에서 시스템 변수 -> Path를 클릭하고 편집 버튼 클릭 새로 만들기를 클릭하고 아까 저장한 링크를 붙여넣기 합니다.  이후 컴퓨터를 재부팅하면 깃..

Unity 2025.03.21

다른 캐릭터의 Animation 내 캐릭터에 적용 시키는 방법

기본적으로 유니티의 애니메이션을 보면 뼈를 이름으로 찾고 설정하는 방식입니다.그렇기 때문에 다른 캐릭터와 나의 캐릭터가 bone의 이름이 다르다면, 애니메이션을 사용할 수 없는것이 일반적입니다.이 문제를 해결하기 위한 기능이 있습니다. Humanoid 라는 Animation Type입니다. Animation Type - Humanoid이 타입은 캐릭터들의 각기다른 뼈의 이름을 하나로 묶어주는 기능을 제공합니다.dictionary를 생각하면 쉬울 것 같습니다. 각기 다른 뼈의 이름을 하나의 Key로 접근할 수 있도록 등록하여 사용하게 됩니다이렇게 Humanoid 타입으로 만들게 되면 애니메이션도 Key값에 맞춰서 변환이 됩니다.  Animation 사용애니메이션이 Humanoid에 맞게 변환이 되었다면, ..

Unity 2025.03.10

Line Renderer를 활용한 움직이는 플랫폼 구현

LineRenderer를 이용한 Moving Platform 구현 방법 1. 사용되는 맴버 변수[SerializeField] private float speed; // 플랫폼의 이동 속도를 조절하는 변수입니다.private Vector3[] positions; // LineRenderer의 정점 정보를 저장하는 배열입니다.private LineRenderer lineRenderer; // LineRenderer 컴포넌트를 참조하는 변수입니다.private bool isLoop = false; // LineRenderer가 루프 모드인지 여부를 나타내는 변수입니다.private bool isForward = true; // 플랫폼이 현재 정점 배열의 순방향으로 이동 중인지 여부를 나타내는 변수입니다.pri..

Unity 2025.03.06

유니티 StartCoroutine의 반환 시점

StartCoroutine의 반환 시점StartCoroutine을 호출하면 즉시 Coroutine 객체가 반환됩니다.코루틴 내부의 코드는 그 다음 프레임부터 실행됩니다.  예제IEnumerator MyCoroutine(){ Debug.Log("Coroutine started"); yield return null; Debug.Log("Coroutine resumed");}void Start(){ Coroutine coroutine = StartCoroutine(MyCoroutine()); Debug.Log("Coroutine returned");} 위 코드의 Log 출력 순서는 다음과 같습니다.1. Coroutine Returned 2. Coroutine Started3. Cor..

Unity 2025.03.06

LeetCode - Remove Duplicates from Sorted Array II (C#)

정렬된 배열을 입력 받을 때, 중복 개수가 최대 2가 되도록 중복 요소들을 제거해주세요. 📗 풀이 방법// 숫자, 중복 개수Dictionary dic = new Dictionary();중복 개수를 빠르게 파악하기 위해 Dicrionary를 사용합니다  for (int i = 0; i nums 배열을 순회하며 Dictionary에 넣어주고 개수를 + 1 해줍니다.📜 목표우리가 구해야 하는 목표는 최대 중복 개수가 2가 되도록 만든 후의 nums 배열과 nums배열의 길이입니다.중복 개수가 2이하인 것들만 nums 배열에 남을 수 있으니 가상의 index를 만들어서 관리해줍니다. int ret = 0;int idx = 0;for (int i = 0; i 중복 개수가 2 이하인 경우 재배치를 해주며 해결합..

유니티 Quaternion 사용법

Quaternion이란? 🤔유니티에서 Quaternion은 3D 오브젝트의 회전을 나타내기 위해 사용되는 수학적 구조입니다. Quaternion은 네 개의 요소로 구성되며, 이는 하나의 실수 부분과 세 개의 가상 수 부분으로 이루어져 있습니다. 이 구조는 3D 공간에서 객체를 회전시킬 때 발생할 수 있는 여러 문제점들을 해결해주는 매우 효율적인 방법을 제공합니다. Quaternion 사용 예시 💡1. 오브젝트 회전유니티에서 Quaternion은 가장 기본적으로 오브젝트의 회전을 처리하기 위해 사용됩니다. 예를 들어, Quaternion.Euler(x, y, z) 함수는 x, y, z 축을 중심으로 한 오일러 각도를 Quaternion으로 변환합니다. 이를 통해 게임 개발자는 오브젝트를 손쉽게 회전시킬..

Unity 2025.03.05

Unity 3D TPS 카메라 컨트롤러 구현

게임 개발에서 카메라 컨트롤은 플레이어 경험을 좌우하는 중요한 요소입니다. 이번 포스트에서는 캐릭터를 중심으로 회전하는 3D 카메라 컨트롤러를 Unity에서 구현하는 방법을 소개하겠습니다.🎯 목표마우스를 이용한 카메라 회전마우스 휠을 이용한 줌 기능카메라와 캐릭터 사이 충돌 감지 🛠️ 멤버 변수 및 역할[SerializeField] Transform target; // 카메라가 따라갈 대상 (캐릭터)[SerializeField] private float minDistance = 1f; // 카메라 최소 거리[SerializeField] private float maxDistance = 5f; // 카메라 최대 거리[SerializeField] private float cameraDist = 3f; /..

Unity 2025.03.05
반응형