전체 글 81

Navmesh 2D 에서 생기는 이동 속도 문제

문제 상황NavMesh 2D를 적용한 이후 플레이어 이동에 이상 현상이 발생했다.이동 속도가 눈에 띄게 느려졌고, 벽에 끼이면 빠져나오지 못하는 문제가 나타났다.NavMesh를 비활성화하면 정상적으로 이동했다.원인 분석플레이어의 이동은 Rigidbody2D.MovePosition()을 통해 처리하고 있었으나,같은 오브젝트에 NavMeshAgent가 함께 사용되고 있었다.NavMeshAgent에는 별도의 이동 명령을 주지 않았기 때문에,Agent가 NavMesh 상의 유효한 위치로 Transform을 보정하려는 동작이 매 프레임 발생했고,이로 인해 Rigidbody 기반 이동 로직과 충돌하면서 속도 저하, 지터, 벽 끼임 현상이 발생했다.해결 방법해결 방법은 다음 두 가지가 있다.방법 1매 프레임 agen..

[Unity] 상속 금지 클래스 (sealed)

Sealed란?클래스를 상속 불가능한 클래스로 정의할때 사용.해당 클래스를 상속으로 사용하려고 할때 에러를 호출함왜 사용하는가? 역할이 고정된 유틸 클래스UpdateGuard는 상태 관리만 하는 “작은 유틸 도구” 역할상속으로 확장할 필요가 거의 없음 → 오히려 상속 금지로 의도를 명확히 함안정성 보장만약 누군가 class MyGuard : UpdateGuard 해서 기능을 억지로 바꾸면,기획한 로직이 깨질 수 있음그래서 상속 막고, 필요하면 기능으로만 쓰도록 유도.최적화 측면JIT(런타임 컴파일러)가 sealed 클래스를 보면 “이 클래스는 파생형이 없네?” 하고 메서드를 인라인 최적화하기 쉬워짐미세하지만 성능에도 이득이 될 수 있음

Unity/문법 2025.09.22

[Unity] 회피 구현하기

회피식 bool isHit = false; if (GetTotalEvasion() acc : 공격하는 대상의 명중률GetTotalEvasion : 공격 받는 캐릭터의 스텟 및 추가 회피율을 합산한 총 회피율acc 와 eva가 같을 경우 50%acc와 eva가 비율 계산을 통해 1과 0으로 수렴하여 스텟 수치에 비례하여 완만한 곡선형 분포 설정장점 레이팅 기반 분수식으로 안정성과 상대적 밸런싱이 뛰어남.고정 % 회피보다 플레이/디자인 모두에서 장점이 큼. 주의점 괄호 필수: acc / (acc + eva) (우선순위 실수 방지).float 연산 보장: 1 대신 1f 사용.Random.Range(0, 1)(int) 금지 → 항상 0. Random.value 또는 Random.Range(0f,1f).상대방의 ..

Unity/기능 2025.09.12

[Unity6] NonAlloc 변경점

1. 문제 상황Unity 6으로 업데이트한 뒤 기존에 사용하던 코드가 더 이상 지원하지 않아 오류 발생int hitCount = Physics2D.OverlapBoxNonAlloc(owner.Rb.position + owner.Controller.LookDir().Item1 * owner.weaponArea/2f,owner.weaponArea,owner.Controller.LookDir().Item2,hitTargetArray,owner.targetMask);2. 원인Unity 6에서 2D 물리의 NonAlloc 계열 API가 통합/정리되었다.이제는 ContactFilter2D를 사용해 레이어/트리거 여부 등을 지정하고,Physics2D.OverlapBox를 호출해야 한다.results 배열은 그대로 재..

Unity6/변경점 2025.09.08

[Unity] 매개변수 params

1. 개념 정리params는 C#에서 가변 인자(Variable Arguments)를 받을 수 있게 해주는 키워드이다.메서드 매개변수에 params를 붙이면, 호출 시 여러 개의 인자를 쉼표로 나열해서 전달할 수 있으며, 내부에서는 배열로 처리된다.public void PrintNumbers(params int[] numbers){ foreach (int number in numbers) { Debug.Log(number); }}2. 사용 목적인자의 개수가 유동적일 때 유용하다.매번 배열을 새로 만들어 넘기지 않아도 되므로 가독성과 사용 편의성이 높다.3. 호출 방법 예시PrintNumbers(1, 2, 3); // OKPrintNumbers(); ..

Unity/기능 2025.08.08

[Unity] Find 함수

1. Find 함수란?GameObject.Find는 씬 내의 활성화된 게임 오브젝트 중에서 이름이 일치하는 오브젝트를 찾아 반환하는 함수이다.필요한 오브젝트를 간편하게 찾아서 사용할 수 있다. GameObject player = GameObject.Find("Player");GameObject.FindWithTag("Player")GameObject.FindGameObjectWithTag("Player")GameObject.FindObjectsOfType()2. 왜 사용을 자제해야 하는가?간단 요약: Find 계열 함수는 느리고, 위험하며, 유지보수에 불리하다.1) 퍼포먼스 문제Find 함수는 씬 전체를 순회하여 검색을 수행한다.게임 오브젝트가 많을수록 성능 저하가 발생하며, 특히 실시간 호출 시 큰 부..

Unity/기능 2025.08.07

[Unity] Time.DeltaTime

1. 개념 정리Time.deltaTime은 이전 프레임과 현재 프레임 사이에 걸린 시간을 나타낸다.이는 보통 Update() 함수에서 사용되며, 프레임 속도(FPS)에 관계없이 일정한 움직임과 연산을 보장하기 위해 사용된다.Unity는 Update()를 프레임마다 호출하므로, FPS가 높을수록 Update()가 더 자주 호출된다.이때 Time.deltaTime을 사용하지 않으면,컴퓨터 사양에 따라 다른 결과를 도출하게 된다.따라서 Time.deltaTime은 1초당 일정한 이동량/속도를 유지하기 위한 보정 값으로 반드시 필요하다.2. 사용 예시void Update(){ float speed = 5f; // 초당 5 이동 transform.Translate(Vector3.right * speed..

Unity/개념 2025.08.06

[Unity] CPU 와 GPU

1. CPU와 GPU의 기본 개념 차이항목CPU (Central Processing Unit) GPU (Graphics Processing Unit)별명컴퓨터의 두뇌병렬 연산 특화 처리기주 역할로직 처리, 시스템 명령 제어그래픽 렌더링, 병렬 연산처리 방식직렬(순차) 처리병렬 처리코어 구성소수의 고성능 코어수천 개의 단순한 연산 유닛특징다양한 작업에 유연동일 작업 반복에 최적화2. Unity에서의 사용 Unity 내부 구성 요소 주요 처리 장치설명 게임 오브젝트 로직 (MonoBehaviour, FSM 등)CPUUpdate(), AI 계산, 충돌 판정 등물리 연산 (Rigidbody, Collider 등)CPUPhys 기반 물리 처리스크립트 연산, 조건 분기CPU조건문, 수치 계산 등메쉬 렌더링, ..

Unity/기능 2025.08.05

[Unity] Unity로 멀티 스레드 사용하기

1. async/await (C# 비동기 처리)목적비동기 대기 (파일 IO, 네트워크 등)메인 스레드를 블로킹하지 않고 기다림특징C# 문법 기반await로 다음 코드 실행을 일시 중지Unity API는 호출 불가 (메인 스레드만 가능)public async void LoadDataAsync() { await Task.Delay(1000); // 1초 대기 Debug.Log("Load Done"); }2. Unity Job System (멀티스레딩 연산 최적화)목적대량의 계산 처리 (예: 수천 개의 물리 계산, 거리 계산 등)Burst 컴파일러로 성능 극대화특징Unity가 스레드 풀 관리 (수동 생성 X)IJob, IJobParallelFor 인터페이스 사용NativeArray 등 Native 메모리만 사..

Unity/팁 2025.08.04

[Unity] 스텍(Stack)과 큐(Queue)

1. 공통점선형 자료구조삽입과 삭제가 한 쪽 또는 양쪽 끝에서 이루어짐데이터를 순차적으로 처리하는 데 유리내부적으로 배열, 연결 리스트 등으로 구현 가능2. 스택(Stack)정의: 후입선출 (LIFO) 구조 — 마지막에 넣은 데이터가 가장 먼저 나옴주요 연산:Push: 데이터 삽입 (top에 추가)Pop: 데이터 제거 (top에서 제거)Peek: top 요소 확인사용 예시:재귀 호출(콜 스택)괄호 검사DFS(깊이 우선 탐색)되돌리기(Undo) 기능Stack stack = new Stack();stack.Push(10);stack.Push(20);Console.WriteLine(stack.Pop()); // 20Console.WriteLine(stack.Peek()); // 103. 큐(Queue)정의:..

Unity/개념 2025.08.03