전체 글 84

내일배움캠프TIL 83일차 정리

Unity에서 Find 계열 함수(GameObject.Find, Transform.Find, GameObject.FindWithTag 등)를 자주 사용하지 말아야 하는 이유1. 성능 비용이 크다씬 전체를 탐색GameObject.Find("MyObject")는 히에라르키에 있는 모든 게임 오브젝트를 문자열 매칭 기준으로 순차 검색합니다.빈번히 호출할수록 매 프레임마다 불필요한 순회 비용이 누적되어 프레임 드랍 원인이 됩니다.실시간 반복 호출 금지Update()나 FixedUpdate() 같은 매 프레임 루프에서 호출하면 더욱 치명적입니다.한번 찾은 참조는 반드시 캐싱하여 재사용해야 합니다.// 잘못된 예: 매 프레임 Find 호출void Update() { var player = GameObject...

개발 TIL 2025.05.29

내일배움캠프TIL 82일차 정리

TCP -UDP -IP1. IP (Internet Protocol)계층: 네트워크 계층 (OSI 3층)주요 역할패킷(Packet) 분할ㆍ전송: 데이터를 IP 패킷 단위로 쪼개어 목적지까지 전달라우팅(Routing): 중간 경로(라우터)를 통해 최적 경로로 패킷을 전달주소 지정(Addressing): 송신자·수신자의 논리적 주소인 IP 주소(IPv4 또는 IPv6) 사용특징비연결 지향: 일단 보내고 책임지지 않음(“best effort”)헤더 정보: 출발지/목적지 IP, TTL(Time To Live), 프로토콜 식별자 등 포함오류 처리 제한: 패킷 유실·순서 뒤바뀜 등을 직접 복구하지 않음2. TCP (Transmission Control Protocol)계층: 전송 계층 (OSI 4층)주요 역할연결 지..

개발 TIL 2025.05.28

내일배움캠프TIL 81일차 정리

모의 면접 중 대답하지 못한 질문에 대해 공부하기위해 정리해봄니다.1. 왼손 좌표계 개요축 방향X+: 오른쪽Y+: 위쪽Z+: 전방(Forward)왼손 법칙왼손의 검지(X축), 중지(Y축), 엄지를 서로 직각으로 폈을 때, 엄지가 가리키는 쪽이 Z+ 방향입니다.회전 방향왼손 법칙에 따라, 축을 엄지손가락 방향으로 두고 검지→중지 손가락이 감싸는 방향이 “+각도”의 회전입니다.2. 쿼터니언(Quaternion) 기본4차원 복소수: q=w+x i+y j+z kq = w + x\,\mathbf{i} + y\,\mathbf{j} + z\,\mathbf{k}허수 단위 관계:i2=j2=k2=ijk=−1 \mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{i}\mathbf{j..

개발 TIL 2025.05.27

내일배움캠프TIL 80일차 정리

사운드 믹스의 소리 값과 사운드 플레이를 비슷하게 실행하면 믹스값 조절이 안되는 버그가 발생함-> 원인을 찾기 위해 순서도 바꿔보고 여러 곳에서 조절해봄-> 도저히 원인을 모를것 같아서 튜터님에게 여쭈어봄-> 튜터님에게 여쭈어보니 예전에도 믹스와 플레이를 동시에 실행하면 이런식으로 버그가 났다고 했다...-> 그래서async를 사용해서 딜레이를 주니 사운드 조절이 정상적으로 완료됨 여러가지 유니티 버그들이 많아서 진짜 에러인지 버그인지 헷갈린다....

개발 TIL 2025.05.26

내일배움캠프TIL 79일차 정리

프로젝트 작업중 팀원들과 함께 테스트 중에 맵이 두번생성되는 버그가 발생했는데 문제는 처음던전에서는 안그러다가 씬전환후 다시 던전에 진입시에 맵이 두번생성되는 버그가 발생했습니다.그래서 살펴보고 튜터님에게 질문했는데 맵 생성시에 구독을 해놓았던 오브젝트가 파괴되면서 구독해제하지 못하는 상황이 발생하여 두번생성되는 버그가 발생하였던 것이였습니다. 그래서 OnDestory에 놓았던 구독해제를 OnDisable로 옮기면서 문제는 해결되었습니다. 이렇게 생명주기에 대해 중요성을 깨달았고 그에대해 정리를 했습니다. Unity에서 ‘생명주기(Lifecycle)’란 MonoBehaviour 컴포넌트가 생성되어 파괴되기까지 거치는 일련의 콜백 함수 호출 순서를 말하며, 이를 제대로 이해하는 것은 안정적이고 예측 가능..

개발 TIL 2025.05.23

내일배움캠프TIL 78일차 정리

스택(stack)과 힙(heap)은 프로그램이 메모리를 관리하는 두 가지 주요 영역으로, 특히 C#/.NET(유니티 환경 포함)에서는 다음과 같은 차이가 있다.1. 할당 방식 및 관리 주체스택(stack)자동 할당/해제함수(메소드) 호출 시 프레임(frame)이 생성되고, 그 안에 지역 변수들이 할당됩니다. 메소드가 끝나면 해당 프레임 전체가 한꺼번에 해제됩니다.관리 주체OS가 스레드별로 고정 크기의 스택 메모리를 할당하며, 개발자가 직접 해제할 필요가 없습니다.힙(heap)동적 할당/GC 관리new 연산자를 통해 객체(참조형식)를 생성할 때 힙에 메모리가 할당됩니다. .NET 런타임의 가비지 컬렉터(GC) 가 일정 주기로 사용하지 않는 객체를 수집하여 해제합니다.관리 주체.NET의 메모리 매니저와 GC..

개발 TIL 2025.05.21

내일배움캠프TIL 77일차 정리

스크립터블 오브젝트로 사운드 매니저를 구성을 한이유?=> 사운드 매니저를 구성할때 예전에는 직접 소스들을 리스트에 넣어서 구성했음 그런데 기존 코드는 한 개의 매니저에서 모든 사운드를 관리하고 그래서 유연성 및 협업등이 힘들게 작업되어있었음그래서 이번에 구성은 코드의 변경없이 사운드 추가가 가능하게 만들었고 풀링으로 메모리 이득을 보면서 스크립터블 오브젝트를 기반으로 쉽게 협업가능하게 작업함SO에서 설정을 아래와 같이 가능 사운드를 만들었지만 volume을 Master, BGM, SFX로 나눌생각을 안하고 스크립터블 오브젝트에서 조절중이였음그래서 변경해봄처음에는 사운드 매니저에서 전체적인 볼륨들을 만들어서 같이 관리할려고 했는데 이것보다는만들어논 사운드 믹스를 사용해서Masterㄴ BGMㄴ SFX이런식..

개발 TIL 2025.05.20

내일배움캠프TIL 76일차 정리

참조 형식(Reference Type)정의 및 저장 위치힙(Heap)에 실제 데이터(객체)를 저장하고, 스택(Stack)에는 객체를 가리키는 참조(레퍼런스, 포인터)만 저장됩니다.종류클래스(class), 배열, 델리게이트, 인터페이스, 스트링(string), 동적 타입(dynamic) 등할당 및 복사MyClass a = new MyClass(); → 힙에 객체 생성, a에는 힙 주소 저장MyClass b = a; → 힙에 객체는 하나, b에는 같은 주소 복사 → 얕은 복사가비지 컬렉션더 이상 참조되지 않는 힙 객체는 .NET 가비지 컬렉터에 의해 자동 해제장·단점장점: 크기가 큰 데이터(예: 대형 배열, 복잡한 객체)를 전달할 때 메모리 복사 비용이 적음단점: 힙 할당/해제 오버헤드, 가비지 컬렉션 빈도..

개발 TIL 2025.05.19

내일배움캠프TIL 75일차 정리

if (tiles.Count > itemRangeTilePrefabs.Count){ for (int i = 0; i 위와 같이 갯수를 확인하고 for문으로 돌려주는 코드를 작성했는데 생각한 만큼 돌지않고 절반쯤에서 멈췄다.이유를 확인하고자 디버그로 확인해보니 for문을 도는동안 itemRangeTilePrefabs.Add를 하면서 itemRangeTilePrefabs.count가 늘어났던게 문제였다. if (tiles.Count > itemRangeTilePrefabs.Count){ int count = itemRangeTilePrefabs.Count; for (int i = 0; i 이렇게 수정 후에 정상적으로 작동했다. 오늘 모의면접을 보았고 내용을 정리 하고자 한다.1. 개념 정의..

개발 TIL 2025.05.16

내일배움캠프TIL 74일차 정리

SO데이터가 든 List를 복사해서 사용할려고 하다보니 얇은 복사와 깊은복사에대해 알게되었다. 얕은 복사(Shallow Copy)정의: “컨테이너(예: List, 배열 등)만 새로 복제”하고, 그 안에 든 각 요소(객체) 자체는 그대로 공유하는 복사 방식입니다.특징리스트만 분리되어 서로 다른 인스턴스로 존재리스트의 요소들은 모두 같은 객체(참조) 를 가리킴요소(객체)의 필드를 수정하면, 복사본·원본 리스트 모두에 영향C# 예시// originalArtifacts: 원본 Listvar shallowCopy = new List(originalArtifacts);// 둘은 다른 리스트지만…Debug.Log(Object.ReferenceEquals(shallowCopy, originalArtifacts)); /..

개발 TIL 2025.05.15