본문 바로가기

Unity

(12)
솔리드 원칙(S.O.L.I.D Principle) 객체 지향에는 5가지의 원칙이 존재합니다.단일 책임 원칙 - Single Responsibility Principle개방 폐쇄 원칙 - Open/Closed Principle리스코프 치환 원칙 - Liskov's Substitution Principle인터페이스 분리 원칙 Interface Segregation Principle의존성 역전 원칙 Dependency Inversion Principle 이 다섯 가지의 초성을 따서 SOLID 원칙이라고 명명되었습니다. 그럼 이제 어떤 원칙인지 알아보겠습니다. 단일 책임 원칙 - Single Responsibility Principle이름 그대로 하나의 클래스는 하나의 책임만 갖는다는 원칙입니다.간혹 하나의 클래스에 여러 가지 기능을 한 번에 구현하는 경우가 ..
싱글톤 패턴(Singleton Pattern) 싱글톤 패턴을 따르는 클래스는 생성자가 여러 차례 호출되더라도 객체는 하나이고 최초 생성 이후 호출된 생성자는 최초의 생성자가 생성한 객체를 return 합니다. 이와 같은 디자인 유형을 싱글톤 패턴이라고 합니다. 해당 객체를 싱글톤으로 구현하여 모든 유저 또는 프로그램들이 해당 객체를 공유하며, 사용하도록 할 때 사용됩니다.간단하게 쉽게 말하자면 메모리 절약을 위해, 인스턴스가 필요로 할 때 똑같은 인스턴스를 새로 만들지 않고, 기존의 인스턴스를 가져와 활용하는 기법을 말합니다. 우리가 전역 변수를 만들어 이용하는 이유는, 똑같은 데이터를 메서드마다 지역 변수로 선언해서 사용하면 무의미하지 않고, 낭비이기 때문에 전역에서 한번만 데이터를 선언하고 가져와 사용하면 효율적이기 때문입니다. 이러한 개념을 그..
직렬화 (Srialize) 직렬화 단어를 이해하려면 USB(Universal *Serial Bus) 인터페이스를 보면 됩니다.*Serial - 연쇄, 연속해서 이어지는 어떤 것. 컴퓨터 -------- USB 메모리- 연속된 드라마 (Serial Drama), 연속적인 데이터(011011001)를 표현할 때도 사용합니다.- 범용적으로 직선상으로 연속해서 들어오는 데이터를 받아 들이 수 있는 인터페이스 직렬화 (Serialization)- 오브젝트를 연속된 문장형 데이터나 연속된 Byte 데이터로 바꾸는 것입니다.object ---> string or bytes메모리 ---> 드라이브 or 통신선- 이런 작업을 하는 이유?    ㄴ object는 메모리에 존재하고 string과 bytes data는 drive에 저장도 할 수 있고,..
3D RPG - 데이터 저장(Json) 데이터 저장을 위해서 저는 Json 파일을 사용했습니다.Json 은 JavaScript Object Notation의 약어로 모든 값이 직렬화가 가능한 Key-Value 값의 쌍으로 이루어진 데이터를 텍스트를 사용하는 개방형 표준 포맷입니다.Json 파일을 사용하기 전 직렬화에 대해서 알아야 합니다. 우선 저장할 데이터들의 클래스가 필요합니다. 먼저 만든 BaseStatus와 PlayerStatus에서는 각각의 스탯들이 분리되어 있기때문에 따로 따로 저장하는 것은 안 좋습니다.  왜냐하면, 파일 읽고 쓰기에서 파일 여는 것 행위 자체가 많은 성능을 차지하기 때문입니다. 그래서 하나의 클래스에 저장할 스탯들을 저장합니다. DataManager.cs...[System.Serializable]public cl..
Enum(열거형) 프로젝트에서 커스텀 Enum 데이터 타입들을 효율적으로 관리하기 위해, 글로벌하게 사용할 공통 데이터 타입들을 모아놓은 클래스를 작성합니다. 이를 통해 유니티 개발 과정에서 다양한 열거형 타입들을 쉽게 정의하고 사용할 수 있습니다. 다양한 클래스에서 공통으로 사용할 수 있는 열거형 타입들을 한 곳에 모아둡니다. 이를 통해 클래스 타입과 네이밍이 겹칠 일이 없고, 자동완성의 이점도 누릴 수 있습니다. 타입들을 네임스페이스로 묶어두면 클래스 타입과 네이밍 충돌을 방지할 수 있고, 자동완성을 통해 빠르게 개발할 수 있습니다.  글로벌 공용 공간에 데이터 타입을 추가하다 보면, 특정 모듈에만 국한되어야 하는 데이터 타입이 추가될 수 있습니다. 이러한 타입들은 해당 모듈로 분리하여 관리해야 합니다. 이 방식은 프..
FSM (Finite-State Machine) FSM(Finite-State Machine) 이란?- 주어지는 모든 시간에서 처해 있을 수 있는 유한 개의 상태를 가지고 주어지는 입력에 따라 어떤 상태에서 다른 상태로 전환시키거나 출력이나 액션이 일어나게 하는 장치 또는 그런 장치를 나타내는 모델입니다.- 유한 상태 기계(FSM) 바탕에 깔린 아이디어는 객체의 행동을 쉽게 처리할 수 있는 덩어리 또는 상태들로 분해하는 것.    ㄴ 플레이어, 몬스터, NPC와 같은 캐릭터의 행동 "Idle(대기)", "Walk(걷기)" 등.. 과 같이 쉽게 처리할 수 있는         상태 단위로 관리하는 것입니다. 게임에서의 FSM-플레이어, 몬스터, NPC와 같은 개인 단위의 행동 관리를 합니다.    ㄴ 지정된 위치로 이동하기, 목표를 공격하기, 도망가기, ..
3D RPG - 플레이어 상태(FSM) 이 글을 읽기 전 FSM이 무엇인지 알고 오면 좋습니다. BaseGameEntity.cs ... [HideInInspector] public Animator Animator; public virtual void Setup() { Animator = GetComponent(); } public abstract void Updated(); ... 모든 씬에 존재하는 모든 Entity들이 상속받는 기반 클래스 BaseGameEntity 스크립트 입니다.이 클래스는 엔티티들이 기본적으로 가져야 할 초기화(Setup)와 업데이트(Updated) 기능을 제공하며, 상속받는 클래스에서 구체적인 동작을 정의할 수 있도록 설계되었습니다. 전체 코드https://gi..
유니티 회전 짐벌락(Gimbal Lock)먼저 짐벌락을 설명하기 전에 오일러 각(Eular Angle)에 대해서 이해해야 합니다. 오일러 각은 3차원 공간에서 *강체가 놓은 방향을 표시하기 위해 오일러가 도입한 세 개의 각도입니다. x 축을 롤(roll), y축을 피치(pitch), z 축을 요(yaw)라고도 부릅니다.오일러 각을 이용해서 물체를 회전하다 보면 두 축이 한 축으로 되는현상이 발생합니다. 이를 짐벌락이라고 합니다. * 강체 - 물리학에서 형태가 변하지 않는 물체유니티는 오일러 각을 이용해 회전을 직관적으로 조작할 수 있도록 인스펙터 뷰에 표시하고 있습니다. 하지만, 내부적으로는 쿼터니언 방식으로 변환하여 회전을 계산합니다. 따라서 사용자가 예외적으로 오일러 각 계산을 이용하도록 설정하지 않는 이상 유니..