Unity 33

[키워드] operator

📜 information Operator(연산자)는 오버로딩(재정의) 하여 기능을 수정할 수 있다. public struct Coord { public int x; public int y; public Coord(int _x, int _y) { x = _x; y = _y; } public static bool operator ==(Coord c1, Coord c2) { return c1.x == c2.x && c1.y == c2.y; } public static bool operator !=(Coord c1, Coord c2) { return !(c1 == c2); } } 📖 참고 문서 C#/.NET 연산자 오버로딩(operator) C#/.NET 연산자 오버로딩(operator) C++과 마찬가지로 C..

Unity 2024.03.17

[길찾기 알고리즘] Flood Fill

📜 information 플러드 필(Flood Fill) 이란? 다차원 배열의 어떤 칸과 연결된 영역을 찾는 알고리즘이다. 해당 알고리즘은 그림판의 채우기 기능과 지뢰 찾기 프로그램에서도 사용된다. 주변에 같은 성질을 가지는 셀을 모두 찾아준다는 공통점이 있음. DFS(재귀) or BFS(Queue)를 지용하여 구현한다 📖 참고 문서 [알고리즘] Flood Fill ( Seed Fill ) [알고리즘] Flood Fill ( Seed Fill ) Flood Fill 알고리즘에 대한 정의를 찾아보면 보통 아래와 같이 나온다. 주어진 시작점으로부터 연결된 영역들을 찾는 알고리즘 다차원 배열의 어떤 칸과 연결된 영역을 찾는 알고리즘 주변에서 joomn11.tistory.com [10분 테코톡] 📚카프카의 탐색..

Unity 2024.03.17

[셔플 알고리즘] The Fisher-Yates

📜 information System.Random prng = new System.Random(seed); // -1 하는 이유는 'the fisher-Yates' 알고리즘에 마지막 인덱스는 생략해도 되기 때문 for (int i = 0; i < array.Length - 1; i++) { int randomIndex = prng.Next(i, array.Length); T tempItem = array[randomIndex]; array[randomIndex] = array[i]; array[i] = tempItem; } return array; 배열을 한 바퀴 돌면서 랜덤으로 뽑힌 값을 자신의 인덱스와 교환한다. 배열의 마지막 인덱스는 구조상 같은 값으로 유지되기 때문에 생략해도 된다. 랜덤 값은 0..

Unity 2024.03.16

Destroy vs DestroyImmediate

📜 information Destroy GameObject, Component, Asset을 제거한다. Update 루프가 끝난 직후 이거나, 시간이 지정된 경우 호출 후 n초가 지난 뒤 바로 파괴한다. MonoBehaviour 스크립트를 파괴하면 OnDisable과 OnDestroy가 스크립트 제거 전에 호출된다. DestroyImmediate 즉시 객체를 파괴한다. 대신 Destroy를 사용할 것을 강력히 권장한다. 에디터 모드에서는 지연 파괴가 호출되지 않기 때문에 이 함수는 에디터 코드를 작성할 때만 사용해야 한다. 둘의 차이는 첫 번째로 파괴의 시점이다. Destroy는 당장 파괴가 되지 않는다. 다시 말해 Destroy가 불린 Update 프레임 내에서 파괴한 객체를 다시 불러도 해당 객체는 ..

Unity 2024.03.16

Physics.OverlapSphere

📜 information Physics.OverlapSphere 중점과 반지름으로 가상의 원을 만들어 추출하려는 반경 이내에 들어와 있는 콜라이더들을 반환하는 함수 반환 값은 Collider 컴포넌트 배열로 넘어온다. Collider[] initialCollisions = Physics.OverlapSphere(transform.position, 1f, collisionMask); // 총알이 생성되었을 때 어떤 충돌체 오브젝트와 이미 겹친 상태일 때 if(initialCollisions.Length > 0) { OnHitObject(initialCollisions[0]); } 📖 참고 문서 [Unity 3D] Physics.OverlapSphere (주변 콜라이더 추출하기) [Unity 3D] Phys..

Unity 2024.03.16

Vector3.Distance vs sqrMagnitude

📜 information Vector3.Distance 두 점간의 거리를 구해준다. sqrMagnitude 두 점간의 거리에 제곱에 루트를 한 값 두 점간의 거리의 차이를 2차원 함숫값으로 계산해 준다. Vector3.Distance가 sqrMagnitude보다 연산속도가 느린데, 그 이유는 Distance로 하는 Vector3을 구하는 연산이 매우 복잡하고 쓸데없는 계산을 해서이다. 건축물 구조 설정 같이 정교한 값을 구할 때는 Distance가 필요하다 2D 게임을 만들거나 단순하게 두 점 간의 거리를 구할 땐 sqrMagnitude가 낫다 A l---------------------------------l B A점과 B점 사이의 거리 P float P = (A.position - B.position..

Unity 2024.03.16

[Attribute] RequireComponent

📜 information RequireComponent 란 요구되는 컴포넌트를 종속성으로 자동으로 추가해준다. [RequireComponent(typeof(Rigidbody))] public class RequireTest : MonoBehaviour {} 2. 자동으로 추가된 컴포넌트를 삭제 하려할 시 경고창을 띄움. 📖 참고 문서 Unity - Scripting API: RequireComponent Unity - Scripting API: RequireComponent When you add a script which uses RequireComponent to a GameObject, the required component is automatically added to the GameObject..

Unity 2024.03.16

for 문으로 AddListener 이벤트를 등록 시 주의할 점. Closure(클로저)

👇 문제 for(int i = 0; i > buttons.Length; i ++) { buttons.onClick.AddListener(() => OnClickButton_PlayerSet(i)); } 이러한 5개의 버튼 배열을 선언해놓은 후 AddListener로 할당하려 했을 때 결과 값으로 i의 마지막 값으로 모두 초기화 되는 현상이 있다. 👇 문제 해결 방법 for(int i = 0; i > buttons.Length; i ++) { int index = i; buttons.onClick.AddListener(() => OnClickButton_PlayerSet(index)); } Closure 문제 때문에 복사해서 사용한다. (5개의 index는 힙에 할당됨) 🤔 Closure(클로저) 란? 람..

Unity 2024.02.12

SQL Server 설치 및 예제 파일 적용 방법

RDBMS(관계형 데이터베이스) 중 하나인 MS SQL(MicroSoft SQL Server) 설치 방법과 간단한 내용 설명을 알아보자. MicroSoft SQL Server은 줄여서 SQL Server라 쓰고 “씨퀄서버”라 읽는다. 현재 게임회사 등 현업에서 가장 많이 쓰이는 DBMS라 볼 수 있다. 🤔 용어 정리 DB(Database) - 한 마디로 정리하면 ‘데이터의 집합’ DBMS(Database Management System) - 데이터 베이스를 **‘데이터의 집합’**이라고 본다면 이러한 데이터 베이스를 운영하고 관리하는 소프트웨어를 DBMS라 부른다. 다양한 데이터가 저장되어 있고 여러 명의 사용자가 공유하고 접근 할 수 있다. 📒 참고 자료 - [데이터베이스 이해하기] Database(D..

Unity 2024.02.12