분류 전체보기 61

첫 번째 30Day Challenges - 기록 (31일)

Day31 2020.7.12 - 싱글턴 패턴Day30 2020.7.11 - 프로토타입 패턴Day29 2020.7.10 - 2748번: 피보나치 수 2 정리Day28 2020.7.9 - 2748번: 피보나치 수 2Day27 2020.7.8 - UnityEvent, UnityActionDay26 2020.7.7 - C# Delegate 정리Day25 2020.7.6 - C# DelegateDay24 2020.7.5 - 관찰자 패턴 정리Day23 2020.7.4 - Project StudyDay22 2020.7.3 - 관찰자 패턴Day21 2020.7.2 - Unity Domain Reload, Scene ReloadDay20 2020.7.1 - Unity Enter Play ModeDay19 2020.6.3..

30Day Challenges 2020.07.13

2748번: 피보나치 수 2 - 동적계획법

https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)�� www.acmicpc.net 동적계획법(Dynamic Programmin)이란 복잡한 문제를 작은 단위로 분할하여 풀고 최종적으로 그것을 결합해 해겨하는 방법을 말한다. 동적계획법의 핵심은 메모이제이션(Memoization)이다. 동일한 계산이 중복되는 문제에서 한 번 계산한 결과는 저장해 둔다. 그리고 다음 번 동일한 계산이 필요할 때 연산하지 않고, 저장해둔 이전 결과에 접근해 사..

Delegate, Event (2) - UnityEvent

UnityEvent UnityEvent는 C# Delegate를 Unity에서 쓰기 좋게 랩핑해 놓은 기능이다. MonoBehaviour를 상속받는 모든 클래스에서 사용할 수 있고, UnityEvent 변수를 선언하면 인스펙터에 표시되고 영구적 콜백을 추가할 수 있다. - 영구적 콜백은 인스펙터에서 등록해준 콜백으로, 런타임에서는 수정(등록/제거)할 수 없다. 선언 # UnityEventTest.cs using UnityEngine; using UnityEngine.Events;// UnityEvent 사용을 위해 import public class UnityEventTest : MonoBehaviour { public UnityEvent unityEvent; } 등록/삭제 스크립트 상에서도 UnityE..

Delegate, Event (1) - C# Delegate

대리자 Delegate Microsoft Docs - 대리자 사용(C# 프로그래밍 가이드) 대리자는 C 및 C++의 함수 포인터처럼 메서드를 안전하게 캡슐화하는 형식입니다. 함수 포인터와는 달리 대리자는 개체 지향적이고 형식이 안전하며 보안이 유지됩니다. 대리자에 대한 호출은 대리자를 통해 해당 메서드로 전달된다. 매개변수가 있을 경우 호출자의 매개변수는 대리자에 의해 해당 메서드로 전달되고, 반대로 반환값이 있을 경우 대리자에서 호출자로 반환된다. # DelegateTest.cs string 매개변수를 받는 delegate를 선언하고, 동일하게 string 매개변수를 받는 메서드를 delegate 객체에 넣어줬다. public class DelegateTest : MonoBehaviour { priva..

관찰자 (Observer)

게임 프로그래밍 패턴 4장 관찰자 관찰자 패턴은 객체와 객체의 상태 변화를 관찰하는 관찰자를 일 대 다의 관계로 정의해두고, 해당 객체의 상태가 변할 때 등록된 다수의 관찰자에게 객체의 변화를 알리는 디자인 패턴이다. 예를 들어, 플레이어의 행동에 따라 다양한 업적을 달성하는 시스템이 있다고 하자. 이때 특정 행동을 하는 코드 부분 부분에 각 업적 달성 코드를 구현하게 되면 상당히 지저분해질 것이다. 스파게티처럼 이곳 저곳에 퍼진 코드는 작은 수정에도 매우 민감해진다. 관찰자 패턴을 적용한다면 플레이어가 특정 행동을 했을 때 관찰자 목록에 알림을 던져주기만 하면 된다. 업적 관찰자는 알림에 맞는 업적 달성 코드를 실행하면 된다. 관찰자(Observer) 관찰자는 객체를 관찰하다 객체의 상태 변화 메서드가..

Design Pattern 2020.07.05

Enter Play Mode, Domain Reload와 Scene Reload

Unity 2019.3 버전부터 'Enter Play Mode'라는 실험적 기능을 쓸 수 있다. 프로젝트가 커지다보면 Play Mode에 진입하는데 걸리는 시간이 어느 순간 확연히 늘어나기 마련이다. Enter Play Mode를 사용하면 이런 문제를 극단적으로 해결할 수 있다. Unity Blog 테스트 따르면 Play Mode 진입 시간이 최소 50%에서 최대 90%까지 단축된다고 한다. 사용 방법은 매우 간단하다. Project Settings > Editor > Enter Play Mode Settings에서 'Enter Play Mode Options'를 켜주면 된다. 두 가지 옵션(Reload Domain, Reload Scene)은 아래서 설명한다. 동작 방식 Unity Editor는 Pla..

Unity & C# 2020.07.02

10816번: 숫자 카드 2 - Hash Table

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 이번엔 Hash Table을 이용해 간단히 풀어보자. Hash Table은 Key에 Value가 저장되는 자료형이다. Python에선 Dictionary가 해당된다. # NumberCard2.py - HashTable def HashTable(): cardsDic = {} for i in cards:# Dictionary에 Key를 카드 번호, Value를 카드 ..

10816번: 숫자 카드 2 - 이분 탐색(Lower Bound, Upper Bound)

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제 분류는 일단 이분탐색으로 되어있지만 Hash Table 구조(Key, Value Pair)를 사용하여 해결할 수도 있다. 이분탐색(또는 이진탐색, Binary Search)은 오름차순으로 정렬되어 있는 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 정렬된 리스트에만 사용할 수 있지만, 매번 검색 범위가 반으로 줄기 때문에 O(logN)의 시간복잡도를 갖는..

경량 (Flyweight)

게임 프로그래밍 패턴 3장 경량 경량 패턴은 어떤 객체의 수가 너무 많을 때 가볍게 만들기 위해 사용한다. 공통적으로 쓰이는 데이터(고유 상태)는 공유하고, 개별적인 데이터(외부 상태)만 별도로 주어진다. 땅, 숲, 강이 섞인 넓은 지형 구현한다고 했을 때 각 지형 타입에 들어가는 Texture는 고유 상태이고, 각 지형의 서로 다른 position, rotation 값 등이 외부 상태다. # TerrainType.cs public class TerrainType { private Sprite _sprite; private int _movementCost; public Sprite Sprite => _sprite; public int MovementCost => _movementCost; public T..

Design Pattern 2020.06.24

명령 (Command)

게임 프로그래밍 패턴 2장 명령 명령 패턴은 메서드 호출을 실체화(객체화)한 것이다. 객체의 형태로 캡슐화함으로써 해당 메서드는 매개변수로 활용할 수 있게 된다. 게임에서 입력키를 변경하는 예제를 봐보자 # InputController.cs MonoBehaviour에서 Update로 Input을 받는 기본적인 방법이다. using UnityEngine; public class InputController : MonoBehaviour { private void Update() { if (Input.GetKeyDown(KeyCode.X)) Jump(); else if (Input.GetKeyDown(KeyCode.A)) Dash(); else if (Input.GetKeyDown(KeyCode.B)) Fir..

Design Pattern 2020.06.18