분류 전체보기 55

[스터디] UI관련 최적화 한 것

1. 캔버스 분할Canvas 하나에 수 많은 UI가 있다면 그 UI 요소 하나만 변경해도 전체 메시를 다시 생성하게 되는 부하가 생긴다 => Canvas에 있는 UI를 유사한 속성끼리 분류해서 Sub Canvas를 만들어서 사용한다. 그렇다고 UI를 너무 디테일하게 분류하여 Canvas를 여러개 만들면 그거 또한 부하가 생긴다. 2. 불필요한 Raycast Target 없애기UI 컴포넌트를 붙이면 자동으로 Raycast Target이 켜져있는데 불필요한 컴포넌트까지 충돌검사를 하는 문제가 생긴다. 3. Camera.main 사용 제거이벤트를 수신할 때 어느 카메라가 기본인지 확인하기 위해 매 프레임 부하가 발생한다. Camera.main을 사용하기 보다는 캐싱해서 사용하거나 프리팹에 할당해서 사용한다. ..

[스터디] 팩토리 패턴이란?

팩토리 패턴(Factory Pattern)은 객체 생성을 캡슐화하는 디자인 패턴 중 하나이다. 이 패턴은 객체의 생성과정을 클라이언트 코드로부터 분리함으로써, 클라이언트가 특정 클래스의 인스턴스를 직접 생성하지 않고도 필요한 객체를 얻을 수 있게 해준다.  * 특징1. 추상화 : 객체 생성 로직을 특정 인터페이스 또는 추상 클래스 뒤에 숨겨, 실제 생성되는 객체의 구체적인 클래스를 클라이언트로부터 숨긴다.2. 유연성 : 새로운 클래스를 추가하거나 기존 클래스를 변경할 때 클라이언트 코드의 변경 없이도 객체의 생성을 관리할 수 있다.3. 재사용성 : 생성 로직을 한 곳에 모아 두어 코드 중복을 줄이고, 유지보수를 용이하게 한다.  * 팩토리 패턴의 종류1. 단순 팩토리 패턴(Simple Factoroy) ..

[스터디] 부동소수점 오차가 나는 이유

* 컴퓨터가 실수를 표현하는 방식 2바이트의 메모리를 가지고 소수점 이하의 값을 갖는 실수의 표현방식을 나름대로 상상해보자. 가장 쉽게 생각할 수 있는 방식은 다음과 같다. "일단 2바이트를 나눠! 그래서 반은 소수점 이상을, 나머지 반은 소수점 이하를 표현하는 거야!" 그래서 다음과 같이 실수를 표현하기로 결정했다고 가정하자.   위의 그림과 같이 실수를 표현한다면, 부호비트가 1이므로 음수, 소수점 이상이 0000001이므로 1, 소수점 이하가 00000101이므로 5이다. 따라서, -1.5를 뜻하는 것이라고 주장할 수 있다. 뭐 생각은 좋았다. 그러나 이렇게 실수를 표현한다면, 2바이트를 가지고 나타낼 수 있는 실수의 수가 몇 개나 되겠는가? 이런 식으로 표현한다면, 복잡한 실수는 도대체 몇 바이트..

[스터디] 개발 시 편의 기능

* Ctrl + M L : 전체 확장 / 숨김 변경 * Ctrl + M M : + - 확장 숨김 요소 변경 * Ctrl + A  ->  Ctrl + K F : 자동정렬, 들여쓰기 * Ctrl + K K : 북마크 설정/해제 * /// : summary 사용 * Debug 모드를 켜서 private 멤버변수Inspector 창에서 보기 * Not null 키워드 사용하기if(_shake != null){    _shake.CameraShake(1f, true);} null 체크를 위해 이전까지 이렇게 사용해 왔다면, _shake?.CameraShake(1f, true); 변수 뒤에 ?.를 붙여서 사용하자. 변수가 null이면 뒤에 함수(메소드) 호출 안함 * Alt + Enter : using namesp..

[스터디] ref/out 차이

'ref'와 'out' 키워드는 메서드에 매개변수를 전달할 때 사용되며, 변수의 참조를 직접 전달한다. 두 키워드는 비슷하지만 사용 방식에 차이가 있다. 1. ref메서드에 변수를 참조로 전달할 때 사용한다. 이를 사용하면 메서드 내에서 매개변수의 값을 변경할 수 있으며 ( C++ 포인터, call by reference, 주소값 전달과 비슷한 기능), 변경된 값이 원래의 변수에 반영된다.  'ref'를 사용하려면 메서드를 호출하기 전에 변수가 초기화되어 있어야 한다. void Modify(ref int value) { value += 10;}int num = 5;Modify(ref num);Debug.Log(num); // 출력: 15   2. out'out' 키워드도 메서드에 변수를 참조로 전..

[스터디] 해시 테이블 자료구조 정리

해시 테이블을 사용하는 유니티의 자료구조는 크게 두 가지가 있다. 1. Dictionary2. HashSet 두 자료구조 전부 '해시 테이블'을 내부 구조로 사용하기 때문에 먼저 해시 테이블에 대해서 알아보자! 해시 테이블은 '키'를 통해 데이터에 빠르게 접근 할 수 있는 자료구조로 내부적으로 해시 함수를 사용해 키를 해시값으로 변환하고, 이를 인덱스로 사용하여 데이터에 접근한다.  해시 테이블의 장점 1. 빠른 데이터 접근키를 통해 거의 '상수 시간'에 데이터를 조회/추가/삭제 할 수 있는 평균 시간 복잡도를 제공한다. 이는 리스트나 배열에서 요소를 찾기 위해 필요한 '선형 시간'과 비교하면 매우 빠르다. 이러한 특성은 게임이 실시간으로 데이터를 처리해야 할 때 매우 유용하다. ※ 딕셔너리 vs 리스트..

[스터디] MVC / MVP / MVVM 나만의 재재재복습

1 MVC : Model - 원본 데이터, 프로퍼티 콜백 구현으로 View로 데이서 쏴줌View - Model의 람다함수에 함수 등록 -> 자동 업데이트Controller - View의 ex) OnClick함수에 의해 입력된 데이터를 Controller에 전달 -> Model값 수정 public static class Const{ public enum Stat { STR, //공격력, 체력 AGI, //회피율 WIS, //공격력, 스킬데미지(전체) LUC, //치명타 데미지 HP, //체력, 체력회복 MP, //마력, 마력 회복 Count, }}// ModelDataMan..

[스터디] 제네릭 Generic 이란?

유니티 제네릭은 이다. 끝! public class Utils : MonoBehaviour{ public void Print(T inputMessage) { Debug.Log(inputMessage); }} 이것이 제네릭이다 라는 어떤 타입에 대해서도 대응할 수 있는 것을 두는것이 제네릭이다. 우리가 이 generic 문법을 어디서 가장 많이 봤냐면  GetComponent(); 할 때 봤다. 이것이 제네릭이다.  https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%97%90%EC%84%BC%EC%8..