일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- knapsack Problem
- PrefixSum
- level1
- programmers
- level3
- BFS
- stack
- Modern C++
- LEVEL2
- trie
- 프로세스 상태
- binary search
- SWEA
- BOJ
- two pointer
- Project
- Zenject
- Silver
- Bronze
- Flyweight Pattern
- Euclidean
- 3D RPG
- effective C++
- solid 원칙
- 프로그래머스
- 8-Puzzle
- Unity
- Gold
- dirtyflag pattern
- algorithm
- Today
- Total
목록Unity (17)
Patrick's Devlog

Observer Pattern관찰하는 대상이 있고, 관찰 중 이벤트 발생 시 역할을 수행하는 패턴이다. 청취자(Observer)들에게 신호를 보내는 라디오 송신탑(Subject)과 유사하다. 오브젝트의 상태가 변경되면 종속된 모든 오브젝트들에게 알림이 간다. 1:N 종속 관계를 사용해 오브젝트가 통신하되 낮은 결합도를 유지한다. Subject는 Observer를 알지 못하거나, 신호를 수신한 Observer가 무엇을 하든 관여하지 않는다. 또한 Observer는 Subject에 대해 종속 관계를 갖고있긴 하지만, 서로에 대해서는 모른다. 그래서 확장과 유지보수에 용이하다. 이는 주로 이벤트 핸들링이나 MVC 패턴에서 활용된다. Subject 추제가 존재하고, Observer들은 Subject를 주시하고..

State Pattern위의 사진은 애니메이션 상태 전이를 위한 Animator임을 이미 유니티 사용자들은 알고있을 것이다. 흔히 이를 유한 상태 머신(FSM)이라고 하는데, 상태 패턴을 기반으로 한다. State는 오브젝트의 다양한 상태를 제어한다. 주로 게임에서의 상태 패턴은 애니메이션이나 NPC에 적용된다. 유니티에서는 이러한 상태 패턴을 시스템화되어있다. 상태 패턴은 객체 내부 상태에 따라 스스로 행동을 변경하는 것이다. 상태를 클래스로 캡슐화하고, 상태 전환을 클래스 간의 참조 변경으로 처리한다. 상태 패턴의 예시는 캐릭터 애니메이션의 상태, 네트워크 연결 상태, 툴 상태 등이 존재한다. 장점상태를 캡슐화해 상태 전환 로직을 각 상태 클래스에 분리 가능 → 유연한 상태 전환상태 전환을 더 쉽게..

단일 책임 원칙(Single-Responsibility Principle)모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다. 클래스가 제공하는 모든 기능은 이 책임과 부합하다. Readability(가독성) : 짧은 클래스가 읽기 쉬움(example> 200~300 lines)Extensibility(확장성) : 작은 클래스로부터 상속이 쉬움Reusability(재사용성) : 부분에서 재사용할 수 있도록 작고 모듈식으로 설계위의 그림처럼 인스펙터 창에 있는 컴포넌트들은 모두 단일 책임 원칙을 따른다. public class Player : MonoBehaviour { [SerializeField] private string inputAxisName; [Serial..

1. Zenject?Unity 3D를 대상으로 제작된 DI 프레임워크(Dependency Injection Framework)이다. 이는 확장이 가능하고, 유연한 방법을 통해 코드를 쉽게 작성, 재사용, 리팩토링, 테스트를 진행할 수 있다. 이에 대한 특징으로는 의존성 주입, 조건부 바인딩, 컨테이너 중첩, 하나의 Scene에서 다음 Scene으로 정보를 전달하기 위해 여러 Unity Scene에 삽입가능, 한 Scene이 다른 Scene에서 바인딩을 상속할 수 있도록 하는 Parent Scene지정 등 여러 가지가 존재한다. 2. Tutorial설명으로는 사실 와닿지 않아서, 간단하게 설치해보고 예시를 확인해보려고 한다. 설치는 쉽게 에셋 스토어에서 할 수 있다. 프로젝트에 설치를 했다면 간단하게 코드..
게임 시작 화면 구상할 때, 간단한 타이틀과 게임 Object를 캔버스에 올리려고 한다. Object는 단순히 캔버스 안에 넣으면 화면에 뜨지 않는다. 아래의 방법대로 차례대로 진행하면 잘 된다. 우선 시작 화면으로 지정할 Scene을 생성한다. Hierarchy에서 Canvas를 생성해주고, Canvas의 Render Mode를 Screen Space - Camera로 변경한다. 그리고 Scene을 생성하면서 만들어진 메인 카메라를 Render Camera에 넣어준다. 그리고 Canvas 안에 Background로 활용할 Image와 Object를 넣을 Button을 생성한다. 마지막으로 Button의 자식으로 원하는 Object를 넣고 Object의 Scale을 조정하면 Canvas 화면에 Objec..

메인 캐릭터가 일정범위 안에 적 안으로 들어오면 적이 메인 캐릭터에게 이동하는 코드이다. SlimeEnemy.cs에서 추가하면 된다. 아래의 코드를 우선 넣어준다. private void UpdateTarget() { Collider[] colliders = Physics.OverlapSphere(transform.position, 6f); // 중점과 반지름으로 가상의 원을 생성해 추출하려는 반경 이내에 들어와있는 콜라이더들을 // 반환하는 함수 if (colliders.Length > 0) // 콜라이더의 개수가 1개 이상이면 { for (int i = 0; i < colliders.Length; i++) { if (colliders[i].tag == "Player") // 콜라이더의 태그가 플레이어..

우선 칙칙한 맵을 숲으로 꾸며주기 위해 맵을 로드해주었다. 맵은 https://assetstore.unity.com/packages/3d/environments/landscapes/simple-low-poly-nature-pack-157552 에서 받아와 그대로 가져왔다. 맵에 대한 수정은 추후 이루어질 예정이며, 일단은 샘플맵을 통해 진행한다. 적은 추후 다수의 적으로 진행할 예정이므로, 우선 2마리의 적을 먼저 맵에 배치해두어 테스트를 진행해보았다. 적에게 가까이 다가갔을 때, 적의 HP가 위에 보이고 애니메이션 또한 바뀌게 된다. 그리고 적에게서 멀어지면 HP가 사라지며, 애니메이션은 원래상태로 돌아간다. 하나씩 살펴보자. 우선 애니메이션을 위와같이 지정해주었다. 평소에는 IdleNormal 애니메..

우선 3인칭을 기준으로 구현을 진행해야 하므로, 카메라를 뒤에 두어 진행하였다. 메인 캐릭터 안에 카메라를 넣고 진행했었는데, 그러다보니 카메라의 시야가 회전하면 캐릭터도 같이 회전되는 일이 발생되었다. 어떤식으로 해결할 지 고민하던 중, 유튜브에서 베르님의 강의를 참고하여 캐릭터 이동을 보완하였다. 자세한 영상은 https://www.youtube.com/watch?v=P4qyRyQdySw 여기서 참고하면 된다. 앞서 언급했듯이, 카메라를 메인 캐릭터에 넣으면 캐릭터도 같이 회전하게 되는 불상사가 발생한다. 이를 막기 위해서 빈 프로젝트인 Character를 생성해주고, 그 안에 메인 캐릭터와 카메라 암을 넣어주었다. 카메라 암에는 메인 카메라가 들어가 있다. 이렇게 수정한 후 코드를 수정해보았다. 우..