Metaverse/Unity 18

디자인 패턴 요약

상속: A is B 장점) 부모 클래스로부터 물려받은 부분은 다시 쓸 필요가 없으므로 재사용 면에 있어서 효율적임 단점) 부모, 조상 클래스가 될 공통된 최소 필수 집합을 개발자가 미리 예상하기 어려움 컴포넌트들끼리 커플링이 심함 컴포넌트: A has B 각자의 기능을 가지고 있는 스스로 동작하는 독립적인 부품 컴포넌트를 뗀다고 해서 오브젝트의 다른 컴포넌트에 영향이 가는 것은 없음 코드의 의존성을 줄이고 재활용성을 높임 인벤토리 기능은 컴포넌트로 구현하는 것이 좋음 컴포넌트란 : 로직을 기능별로 컴포넌트화하는 것, 기능들을 나누어 각각 독립적인 클래스로 분리 한 개체가 여러 분야를 서로 커플링 없이 다룰 수 있게 해줌 인터페이스 & 다형성과 연관 : 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)를..

Metaverse/Unity 2023.07.24

체감형 AR 디자인 - 최적화

텀프를 어느 정도 진행하다보니, 오류나 어려웠던 점들을 정리해두려고 오랜만에 티스토리 들어왔다 요즘 거의 텀프랑 팀플에만 시간을 다 쓰는 것 같고 그러니 24시간이 부족하다는 생각이 든다.. 암튼,, 우선 monster 프리팹이 3가지로, 색이 각각 다르다 그래서 monsterFactory를 3개 만들어서 하나의 오브젝트 풀에 담고, 조건에 맞게 씬에 생성하도록 했다. 생성은 SetActive를 활용했고, 총알에 맞으면 SetActive(false)하도록 충돌처리를 했다. 몬스터가 생성될 때 StartCoroutine()을 사용해봤다. 총알도 마찬가지로 오브젝트 풀을 사용했고, 터치를 입력 받을 때마다 생성되도록 했다. 배열로 써둔 코드를 최적화할 때 좀 어려웠고 생각보단 시간 투자를 많이 한 것 같다...

Metaverse/Unity 2023.05.17

Object Pool

메모리는 좌측에서 우측으로, 위쪽에서 아래쪽으로 데이터를 저장하는 특징이 있음 이 때 첫번째 이미지와 네번째 이미지를 메모리에서 제거해보면 아래 이미지 처럼 됨 만약, 3번 이미지를 추가로 로드하려면 3번 이미지가 메모리에 로드될 때 필요한 공간은 6칸이 되고 확보하고 있는 빈 공간은 1번과 4번을 제거했으므로 7칸이 남아있음 그러면 3번 이미지를 로드할 때, 이렇게 오버 플로우가 발생함 2번 이미지는 데이터의 손실이 발생해 문제가 생김: 메모리 파편화 / 메모리 단편화 문제 이를 방지하기 위해 C# / JAVA는 가비지 콜렉터를 돌려 메모리를 정리해주지만, 이는 CPU를 낭비하는 일이므로 비효율적 따라서, 사용할 데이터를 미리 메모리에 올려 메모리에서 삭제하지 않음 그러면 메모리를 정리할 필요도 없으니..

Metaverse/Unity 2023.05.06

C# / 싱글톤 디자인 패턴

해당 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법 프로그램이 동작하는 동안 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하는데 아주 용이한 특징이 있음 생성자를 다른 곳에서 새롭게 선언하더라도 이미 정적으로 선언된 객체가 반환되므로 중복 생성을 방지 초기 객체를 생성하게 되면 정적 메모리에 올라가므로 이후 호출하는데 빠르게 접근 가능 정적 메모리에 할당된 객체로 해당 객체에 너무 큰 메모리가 쌓이게 되면 프로그램 성능이 현저하게 낮아질 수 있음 (정적 메모리에 할당할 수 있는 메모리 크기가 제한적) 프로그램이 복잡해지면서 서로 다른 데이터를 공유하게 되는데 이때 다른 객체들과 결합도가 낮아지게 됨 하나의 정적 메모리를 사용하므로 병렬 처리나 동기화와 같이 여러 방..

Metaverse/Unity 2023.05.06

Raycast

Physics.Raycast 직선을 씬에 투영하여 대상에 적중되면 true를 리턴하는 물리 함수 캐스팅 성공 실패에 따른 결과만 리턴하는 간단한 형태에서 부터 대상과 Ray의 충돌에 관련된 자세한 정보를 (직선과 객체의 교차 정보. 거리, 위치, 캐스팅에 검출된 객체의 Transform에 대한 참조 등) 리턴하는 다양한 버전이 제공되고 있음 Ray 변수 RaycastHit 변수 Raycast 함수 Ray 구조체 사용법 : Ray는 직선의 시작점(origin)과 방향(direction)을 가지고 있는 단순한 구조체 시작점(origin)은 Vector3 타입의 월드 포지션이며 방향(direction)은 직선 Ray 생성 방법 1) new 이용해 직접 생성 Ray ray = new Ray(transform.p..

Metaverse/Unity 2023.04.05

deltaTime & fixedDeltaTime

deltaTime 용도 : 타겟 디바이스마다 성능 격차로 인해 프레임 수행 시간이 다를 것을 대비해 보정하기 위해 사용됨 전 프레임이 완료되기까지 걸린 시간을 말함 컴퓨터의 성능이 나쁠수록 값이 커짐 한 프레임이 완료되기까지 걸린 시간이 1초면 1, 10초면 10이 됨 deltaTime Time.deltaTime을 통해 참조 : 이전 프레임의 발생 시각과 현재 프레임의 발생 시각 사이의 시간 간격, 즉 이전 프레임의 수행에 걸린 시간 의미 Update() 내에서 시간의 진행에 따른 일정한 기능을 구현하기 위해 Time.deltaTime을 이용해 보정 fixedDeltaTime Time.fixedDeltaTime을 통해 참조 : 기본적으로 물리 업데이트 발생 주기, 즉 Fixed Time Step 값을 의..

Metaverse/Unity 2023.04.05

OnCollision & OnTrigger

OnCollision OnCollisionEnter: 물체 간의 충돌이 처음 일어났을 때 호출 OnCollisonStay: 물체 간의 충돌이 일어난 후 충돌이 지속될 때 호출 OnCollisionExit: 물체 간의 충돌이 끝나는 그 순간에 호출 OnCollision은 물리적 계산과 충돌을 함께 감지 OnTrigger OnTriggerEnter: 물체 간의 충돌이 처음 일어났을 때 호출 OnTriggerStay: 물체 간의 충돌이 일어난 후 충돌이 지속될 때 호출 OnTriggerExit: 물체 간의 충돌이 끝나는 그 순간에 호출 OnTrigger는 물리적 계산은 하지 않고 충돌만 감지 OnCollision vs OnTrigger Collision 충돌 처리를 할 때, 두 객체 모두 컴포넌트에 Rigid..

Metaverse/Unity 2023.04.05