목록분류 전체보기 (116)
Game Tech Blog
Unity Addressable Asset System이란? - "주소" 별로 Asset을 로드하는 방식을 제공하는 시스템 - 비동기식 로딩을 사용하며, 모든 종속성 컬렉션이 있는 모든 위치에서의 로딩을 지원. - 기존 Asset Bundle 또는 리소스 폴더를 사용하든 관계없이 Addressable Asset 은 게임을 더욱 동적으로 만드는 간단한 방식을 제공. 기존에 잘 쓰던것도 있는데 왜 또 개발되었는가? - 기존에 잘 쓰던 방식은 리소스 폴더, 에셋 번들을 사용하는 방식이 있었다.다만, 각각의 치명적인 이유가 있어서 이 문제들을 해소하기 위하여, Addressable 이 개발된 것으로 보아도 무방하다. 1. 리소스 폴더 사용 방식 1) Apk 사이즈가 커진다. -> Resources 폴더 안에 들..
자랑할 만한 일도 아니지만 브론즈에서 올라오는데 의외로 많은 문제를 풀어야했다. 급하게 준비하고 bfs,dfs 를 많이 풀어서 내용 정리를 못한 부분도 있으나, 추후 정리가된다면 포스팅할 예정.
DFS / BFS 란? 그래프 탐색 알고리즘들 이다. 이들을 사용해서 구할 수 있는건 무엇인가? 1) 최단 경로 구하기 2) 지나온 경로 구하기 3) 사이클링 구하기 4) 조합 수들 구하기 정도가 있다. DFS / BFS 의 차이점은 무엇인가? 1) DFS => 루트에서 시작해서 시작한 가지를 완전히 탐색 후 다음 분기를 탐색하는 방식 => Stack, 재귀함수를 이용해 구현한다. a) 장점 i) 인접한 관계가 아닌 Depth 상 깊이 있을때, BFS 보다 더 우선적으로 탐색된다. ii) 일련의 다른분기로 넘어가기 전에, 끝까지 탐색하면서 완전 탐색을 수행한다. b) 단점 i) 앞 선, 가지의 수가 많은 경우에 매우 비효율적이다. c) 사용효율 i) 모든 노드를 방문 할 경우, DFS ii) 서로 다른 ..
Draw Call (드로우 콜) 이란? CPU가 GPU에게 가지고 있는 오브젝트의 정보 기반으로 메쉬를 렌더링하라! 라는 명령을 일컫는다. 여기서 오브젝트가 렌더링 되기 위한 정보는 아래와 같다. 1) 메쉬 정보 2) 버텍스 정보 3) 텍스쳐 정보 4) 이외 다수 정보. CPU의 명령과 렌더링 되기 위한 정보를 기반으로 GPU 는 오브젝트를 그릴 수 있다. 어떤 과정을 기반으로 그리는가? CPU 와 GPU 는 긴밀한 협업관계를 가지고 있다. 먼저, GPU가 메쉬를 렌더링 하기위해선 그릴 버텍스 데이터, 텍스쳐 머티리얼, 쉐이더 정보들이 있어야한다. 이들을 미리 CPU가 로딩하여, GPU 메모리에 올려놓고, 그 재료들을 이용하여 GPU가 렌더링 연산을 수행한다. 중요한 것은 CPU에서 로딩한 데이터들은 복..
리플렉션 이란? C# 에서는 어플리케이션 실행 도중에 객체의 정보를 확인하기 위한 기능이다. 객체의 정보는 주로 메서드, 프로퍼티, 생성자등 인스턴스 데이터 타입 정보를 통칭한다. 예를들어, 내가 지금 제네릭 클래스를 원소로 List 등 자료구조를 사용하고 있을때, 내가 A 클래스를 쓰고 있는지 B 클래스를 쓰고 있는지 알 수 없는데, 리플렉션에 있는 GetType() 을 사용하면 내가 현재 쓰고 있는 클래스 형태를 알 수 있다. 그렇다면, 리플렉션은 어떻게 사용되어야 효율적인가? 런타임 시점에서 테스트 및 디버깅 목적으로 객체의 동작을 분석하거나, 테스트 용도로 사용되면 가장 베스트다. 이는 리플렉션은 테스트 용도로 사용하고 실제 프로그램 개발단에서는 리플렉션을 이용한 로직은 최대한 지양해야 한다는 의..
참조로 전달이란? 함수의 인자로 넘길때는 여러가지 방법이 있다. 1) 값으로 전달 2) 참조로 전달 C++ 로가면, Call by value, Call by reference, Call by Pointer 이렇게 얘기하는 부분들이 있는데, 쉽게 이야기하면 넘기기 직전의 값을 복사해서 값만 넘길 것이냐, 주소까지 완전 복사해서 이 인자를 수정하면 넘겼던 주체까지 수정될 수 있게 하느냐 그 차이다. C# 에서 값을 참조로 변경해서 넘기기 위해서는 out, ref 키워드를 정해서 작성해야 한다. 작성 예는 아래와 같다. public void Test_Func(ref int a){ a += 10; } static void Main(){ int test_A = 10; Test_Func(ref test_A); } ..
[문제] 주몽은 철기군을 양성하기 위한 프로젝트에 나섰다. 그래서 야철대장을 통해 철기군이 입을 갑옷을 만들게 하였다. 야철대장은 주몽의 명에 따르기 위하여 연구에 착수하던 중 아래와 같은 사실을 발견하게 되었다. 갑옷을 만드는 재료들은 각각 고유한 번호를 가지고 있다. 갑옷은 두 개의 재료로 만드는데 두 재료의 고유한 번호를 합쳐서 M(1 ≤ M ≤ 10,000,000)이 되면 갑옷이 만들어 지게 된다. 야철대장은 자신이 만들고 있는 재료를 가지고 갑옷을 몇 개나 만들 수 있는지 궁금해졌다. 이러한 궁금증을 풀어 주기 위하여 N(1 ≤ N ≤ 15,000) 개의 재료와 M이 주어졌을 때 몇 개의 갑옷을 만들 수 있는지를 구하는 프로그램을 작성하시오. [입력] 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ ..
[문제] 윤영이는 3의 배수 마니아이다. 그는 모든 자연수를 3개의 3의 배수의 자연수로 분해하는 것을 취미로 가지고 있다. 문득 그는 자신에게 주어진 수를 3개의 3의 배수로 분리하는 경우의 수가 몇 개인지 궁금해졌다. 하지만 윤영이는 마지막 학기이기 때문에 이런 계산을 하기에는 너무 게을러졌다. 그래서 당신에게 이 계산을 부탁했다. 즉, 임의의 3의 배수 자연수 n이 주어졌을 때, 해당 수를 3의 배수의 자연수 3개로 분리하는 방법의 개수를 출력해라. 단 분해한 수의 순서가 다르면 다른 방법으로 간주한다. 예를 들어 12 = 3 + 6 + 3 과 12 = 3 + 3 + 6 은 다른 방법이다. [입력] 임의의 3의 배수 자연수 n이 주어진다. (3 ≤ n ≤ 3000) [출력] 자연수 n을 분해하는 방..