[T-Engine] | #0 : 엔진을 제작해보자
·
개발/T-Engine
개요2학기 중후반, 게임 프로그래밍 프로젝트가 이제 막 시작할 시기에 저는 저만의 프레임워크를 만들고 싶어졌습니다.프로젝트를 만들기 위해 제공되는 프레임워크의 구조가 조금 불편했기 때문이죠.특히 방과후에서 듣던 수업에서 만들던 프레임워크가 그 구조보다 더 좋아서 더 불편했어요. 그래서 저만의 구조를 가진 프레임워크로 좀 뜯어버리고 싶더라구요.그렇게 혼자서 구상을 하다보니 저는 저만의 프레임워크를 만들어보기로 결정했습니다.    T-Engine그래서 나온게 T-Engine입니다.왜 이름이 T-Engine이냐 하면 C#에선 제네릭, C++에선 템플릿이라고 부르는 그거 있잖습니까.꺽쇠 안에 T 들어있는 그거. T>.이 제네릭이나 템플릿처럼 프레임워크를 어느정도 자유롭게 만들어보겠다는 저의 다짐입니다.     ..
[C#] | 한대 때리고 싶은 Exception has been thrown by the target of an invocation. 은 대체 뭐고 어떻게 해결하는걸까
·
개발/C#
개요아. 이전에 FSM을 짜면서 한번 고생했던 기억이 있는 버그인데 또 만났습니다.    왜 뜨는거임?일단 이 예외는 Reflection을 사용할때 납니다. Reflection으로 접근중인 클래스, 메서드, 필드, 프로퍼티에서 예외가 Throw될 경우 '난 일단 뭔 Exception인지 모르겠는데 아무튼 저기서 예외라는데?' 라는 무책임한 마인드로 던져집니다. 정확히는 MethodInfo.Invoke()나 PropertyInfo.SetValue() 같은 Reflection을 통한 호출 과정에서 내부 메서드가 예외를 Throw 할 경우에 발생합니다.저같은 경우 Activator를 통한 클래스 생성 도중에 생성자에서 NullReference를 뱉으면서 받았습니다. 이걸 처음 만나면 일단 원인을 알 수가 없기..
[C#] | 확장 메서드 쓰고 싶다~.
·
개발/C#
개요    확장 메서드(Extension Method)가 뭘까확장 메서드는 기존에 존재하던 클래스의 기능을 '확장' 하는 메서드입니다.기존에 존재하던 클래스에 내 맘대로 메서드를 추가할 수 있다는 뜻이죠. 이해하기 쉽게 예시를 들어봅시다.using System;public void Main(){ int[] array = new int[10];}int 배열을 만들었죠. 근데 전 이 배열을 조금 더 쉽게 다루고 싶습니다.배열에서 특정 조건을 만족하는 값만 뽑는다거나 말이죠. 아실 분들은 아시겠지만 이런 기능들을 쉽게 제공해주는 Linq라는 기능이 C#에 존재합니다.특정 조건을 만족하는 값만 뽑는 메서드(Where)는 실제로 배열, List, Dictionary 같은 클래스의 멤버 함수로 존재합니다....존재..
[Project EW] | #2 : 나중에 제목 생각나면 바꾸겠습니다
·
개발/Project EW
개요프로젝트 제출이 무사히 마무리되었습니다.구조 설명을 하기 전 간단하게 뭐하는 게임인지 적어보죠.    기획 수정?일단 본래는 [Project EW] | #0 : 윈도우창을 이용한 퍼즐게임에서 설명했 듯 플랫포머 퍼즐 게임이 될 예정이였습니다.하지만 게임 특성상 윈도우가 상당히 정적이고 루즈하기에 게임이 '우와 신기하다'가 되어도 '우와 재밌다'는 되기 힘들 것 같다는 피드백이 들어왔고 확실히 생각해보니 '윈도우 창을 이용해서 게임을 만들면 신기하겠지?' 라는 마인드로 게임을 기획했었다는 사실이 떠올랐습니다. 그래서 디펜스로 게임의 향방을 바꾸었죠. 간단하게 설명하자면 중앙에 있는 플레이어를 지키는 디펜스 게임인데 플레이어는 못움직이고 그 대신 윈도우창을 움직여 적을 잡는 게임입니다.윈도우 창으로 시야..
[Project EW] | #1 : Project EW 개발일지는 서비스 종료다...
·
개발/Project EW
개요에...??혼또...?    그래서말 그대롭니다.Project EW의 개발일지는 서비스 종료했습니다.서비스를 한적이 없는데 어떻게 서비스를 종료하냐고 묻지는 말아주세요... 변명은 다 집어치우고 귀찮고 힘듧니다.일단 개발일지라는게 적기 매우 힘들어요. 이거 개발이랑 병행할 수 있는 미친놈은 세상에 존재하지 않을거라고 생각했는데 불과 1학기 전의 제가 무려 프로젝트 2개의 개발과 개발일지를 병행했더라구요??? 도대체 어떻게 했는지는 잘 기억이 안나지만 그땐 뭐 체력이 넘쳐났나봅니다.아무튼 프로젝트 제출이 1주 남았고 개발할것도 산더미인데 개발일지를 적을 힘이 안납니다.개발일지를 적자고 첫 글을 올릴때도 이미 개발이 어느정도 진행되어 있는 상황이였구요.원래 이미 개발되어 있는 거 다시 한번 해설하고 해결..
[Project EW] | #0 : 윈도우창을 이용한 퍼즐게임
·
개발/Project EW
개요프로젝트 시간이 돌아왔습니다. 기획일단 'Project EW'는 게임 프로그래밍 시간의 프로젝트입니다. C++이고 저번처럼 콘솔창이 아닌 WinAPI를 사용합니다.그러다보니 조금 더 로우레벨의 기믹을 구성하고 싶어서 저희는 조금 색다른 시도를 해보기로 했습니다.바로 WindowKill 같이 윈도우 창을 여러개 띄워보는 게임을 만들기로 했죠. 그런데... 이제 윈도우창 하나하나가 플랫폼인. 플랫포머 게임이고 이제 플레이어는 자신의 캐릭터를 좌우 이동, 점프 등을 통해 움직일 수 있고 윈도우 창들을 이용하여 도착지까지 캐릭터를 옮겨야 합니다. 말했듯이 윈도우창 하나하나가 플랫폼이며 윈도우 창을 옮김으로써 플랫폼의 위치를 바꿀 수 있는 그런 느낌입니다.기믹 창도 여럿 있는데 설명하기가 귀찮으니까 여기까지 ..
[Unity/C#] 버프, 디버프 시스템입니다. 근데... 비트 마스킹을 곁들인.
·
개발/Unity
개요이번 글은 [Unity/C#] 포션 시스템의 후속 글입니다. 원활한 이해를 위해 글을 읽고 와주시면 감사하겠지만 귀찮다면 읽지 않아도 괜찮습니다.    아이디어 정리일단 가장 저명한 게임인 마인크래프트를 예시로 들어보자면 버프와 디버프는 다음과 같이 중첩되어 있는 것이 일반적입니다. 이것을 관리하기 위해서 그냥 List 자료구조를 쓰는것도 괜찮지만 만약 특정 버프, 디버프가 들어있는지 판단을 해야한다면 그것을 판단하기 위해 탐색을 해야하기 때문에 O(n)의 시간 복잡도가 발생합니다.물론 리스트가 길어봤자 얼마나 길겠냐마는 더 좋은 방법이 있는데 굳이 안 쓸 이유야 없잖아요? 그래서 비트 마스킹 기반으로 현재 버프, 디버프의 상태를 저장하고 구현부는 또 따로 돌려주기로 했습니다. 일단 각각의 상태이상들..
[C++] | extern "C"와 __declspec(dllexport)는 대체 뭔데
·
개발/C++
개요C++로 DLL을 익스포트하여 유니티에서 사용하려고 할때 C++안의 함수에 extern "C" __declspec(dllexport)를 붙입니다.참 기괴하게 생겼는데 어찌보면 C++답게 생겼습니다.오늘은 얘네들이 뭐하는 놈인지를 살펴보죠.    extern "C"딴거 다 제쳐두고 뜻만 알아보자면 extern "C"는 코드를 C언어 스타일로 내보내라는 뜻입니다....너무 막연하죠? 당연하게도 뭔소린지 모르겠습니다. C++도 해보다보면 사실 C언어 확장판이라 대체 C언어 스타일이 뭘까 고민하게됩니다.조금 더 깊이 들어가자면 extern "C"는 name mangling을 하지 말라는 뜻입니다. name mangling이 extern "C" 키워드를 이해하기 위해선 먼저 C++의 name mangling을..