[FRACTiLE] | 정적 클래스 기반 Input System과 InputBindingComposite
·
개발/FRACTiLE
개요'격 자'의 리메이크 프로젝트.'FRACTiLE' 입니다. 기존에 사용하던 New Input System과 SO를 결합하는 대신 정적 클래스로 구조를 새로 다듬어볼겁니다. 아이디어 정리일단 기존에 사용하던 SO 기반 Input System은 이 글에서 보실 수 있습니다.별로 보지 않는걸 추천합니다. 예전 글이라 그런지 말투가 정돈이 안돼있네요. 간단하게 설명하자면 Player Input 컴포넌트를 사용하는 대신 Generate C# Class 옵션을 통해 클래스로 입력을 받고 그 입력을 SO를 통해 호스팅 하는 그러한 구조입니다. 에셋을 통해 관리하고 의존성이 낮다는 장점이 있습니다. 또 인스턴스가 1개 이상일 수 있어서 둘 이상의 플레이어를 관리하기 좋을 수도 있습니다. 이건 안해봐서 잘 모르..
FRACTiLE
·
개발/FRACTiLE
[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 같은 클래스의 멤버 함수로 존재합니다....존재..
[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을..
[Unity/C#] | 포션 시스템
·
개발/Unity
개요반갑습니다.오랜만에 개발일지로 찾아뵙습니다. ...하지만 개발일지라기보단 이미 개발된걸 되짚어보는 글에 가깝습니다. 각설하고, 시작하죠.    포션을 왜?한동안 프로젝트 활동이 없던 제가 왜 갑자기 개뜬금없이 포션 시스템을 만드느냐 하면?복잡한 사정이 겹치고 겹쳐 현재 결선에 올라가있는 STA+C팀에 개발자로서 참여하게 됐습니다. 그래서 그 게임의 메인 기믹인 포션을 제가 맡아 개발하기로 했죠. 대충 이런 포션들입니다.   원래 버프 디버프 시스템도 작성했지만 글이 너무 길어질것 같아 일단 떼어놓고,이제 이걸 어떻게 만들었는지 하나하나 풀어보죠.    아이디어 정리기본적으로 포션을 각자의 이펙트마다 하나하나 클래스를 만들어 관리하는건 비효율적이라고 생각했습니다.(ex : GrowingPotion, P..