GAME DEV
-
[ EDGE 개발 기록 ] 플젝 개요와 Enemy AI SO분리 시스템
개요Edge가 무엇인가.. 그것은 동계 게임잼 프로젝트에서 기원한 게임인 것이다.(이때 만든 게임인.) [ 팀 프로젝트 후기 ] 동계 게임잼 시즌2를 마치며왜 시즌 2냐면 올해 1월에도 동계 게임잼을 했었다.그때는 고1 신분으로 참여하게 된 행사이지만 같은 해인 2024년 진행했기 때문에 이번에 한 게 시즌2라고 볼 수 있다.12월 18~20 일까지 동계 게임dev-vcs.tistory.com 여러 프로젝트들을 끝내고 나서. " 아 나중에 다시 리메이크해야지 "라는 생각을 해왔고.실제로 프로젝트를 파기까지는 성공한 프로젝트들이 수두룩 하지만.진심으로 개발을 지속한 프로젝트는 거의 없었다. 하지만 동계 게임잼 프로젝트였던 Edge? 게임성도 좋았고. 실제로 결과도 좋았던 프로젝트였기 때문에,여기다 시간을..
-
[ 졸업작품 개발 기록 ] 로프 스윙과 벡터 내적
졸업작품은 돌고 돌아 누구나 개발하기를 꿈꾸는 2D 플랫포머 액션 게임을 만들게 되었다. 그중에서도 레퍼런스 게임은 2D 플랫포머액션 개발의 진입장벽을 무자비하게 올려버린바로 산나비라는 게임이다. 이 게임은 로프액션이라는 신박한 이동방식과 이를 이용한 속도감 있고타격감 있는 전투를 진행하는 게임이다. 정말 재미있게 플레이한 게임이고 그렇다 보니 비슷한 메커니즘의 게임을 너무나 만들고 싶었다. 그를 위해 필요했던 여러 시스템중 고민이 되던 부분이 있다.그것은 로프 체공 중에 스윙방향을 연산하여 그 방향으로 가속을 하는 시스템이다.이런 연산을 해주지 않으면옆으론 비교적 빠르게 스윙하는데 위로는 속도가 엄청 안 나오는 그냥 구린 조작감이 탄생한다.그리고 특정 위치에서 스윙을 사용할 때 의도되지 않은 이동을 하..
-
[ 게임 개발 ] Caster 시스템 - Damage, Knockback
요즘 게임 코드 구조들을 짤 때 유니티 컴포넌트 시스템을 적극 활용하여기능분할과 깔끔한 종속성 구조를 만드는 것을 즐기고 있다. 그중에서 제일 실용적으로 쓸만하고 마음에 드는 구조가 이 Caster라는 놈인데현 졸업 작품 개발에도 활용하고 있는 기능이다. 말은 뭐 되게 대단한 거 소개하는 뉘앙스인데 꽤 간단하다이런 식으로 각각 물리 캐스팅을 통해 감지했던 캐스트 구조를 이런 식으로 감지는 Caster가 하고 기능별로 필요한 기능은 기능 캐스터들이감지된 Target에 대한 정보만 받아 처리하는 방식이다. 그래서 이런 식으로 Caster구조를 만들어두면기능에 따라 깔끔하게 분할된다. 캐스팅 시에 기능을 추가하고 싶다면 아래에기능 캐스터들만 추가로 달아주기만 하면 되는 것이다. 이제 구현을 해볼..
-
[ 게임 개발 ] Normal 벡터, Normal Map은 무엇일까
Normal벡터를 알고 있는가?평범함, 보통을 의미하는 Normal이 아닌 조금 더 수학과 게임 개발에 관련된 개념이라 볼 수 있다. Normal은 국산말로 법선이라고 한다.법선? 물리나 기하학 혹은 선형 대수학을 공부해 보았다면 기억에 남을 수도 있다. 쉽게 설명하자면 어떤 면이 바라보고 있는, 즉 평면에 수직인 벡터를 의미한다. 꽤 익숙하지 않은가? 물리시간에 했던 입사각, 반사각사이의 법선이라는 개념이 존재하는데이 법선과 같은 것이다. Blender에서 노말벡터를 Gizmos로 그려주는 기능이 있는데 이것으로 정육면체를 보면이런 식으로 표시된다.이 면에 대한 Normal은 외적을 통해 구할 수 있는데.삼각형을 나누고 각 삼각형에서 두 벡터를 만들어 외적을 해주면 그 삼각형에 대한 Normal이 나..
개발 잡소리
-
[ 개발 잡소리 ] StringBuilder를 사용해보자
StringBuilder를 알고 있는가?StringBuilder는 문자열을 효율적으로 다루기 위한 C# 내장 클래스이다.간단히 말해서 문자열을 반복적으로 수정하거나 추가할 때에 StringBuilder를 사용하면 성능이 훨씬 좋아진다.그냥 String을 쓰면 안 되나??string을 쓰면 안 되는 게 아니다. 일반적인 경우에서는 그냥 string을 넣는 게 맞다.다만. 몇 가지 경우에 string을 쓰는 것이 엄청난 오버헤드가 발생한다. C#에서 string은 불변(immutable) 객체이기 때문에. 기존 문자열을 수정하면, 기존 문자열을 바꾸는 게 아니라새로운 문자열을 새로 만들고 기존의 문자열은 버리는 식으로 작동한다.string result = "";for (int i = 0; i 내부적으로 매..
-
[ 개발 잡소리 ] 제네릭과 템플릿
이게 뭐지?제네릭은 C#에 존재하는namespace인데 이는 여러 유용한 자료구조 클래스들을 지원해 주고이런 것들에는 List, Queue, Stack, Dictionary가 있다. 이런 자료형에 대한 부분 중에 Stack과 Queue는 다른 글에서 앞서 설명한 적이 있으니 생략하고List와 Dictionary에 대한 설명을 하겠다. ListList는 길이에 제약을 받지 않는 가변길이 배열이다.C++로 치면 vector에 해당하는 개념인 것이다.사용 예제는 이러하다. List numberList = new List();일반적인 정적 배열과는 달리 가변길이 배열이기 때문에Add나 Remove와 같은 메서드를 통해 리스트의 요소들을 쉽게 관리할 수 있다. 하지만 이 List가 편하고 좋다고 완전히 배열을 대..
-
[ 개발 잡소리 ] 메모리 구조
메모리 구조는 무엇일까?딱딱한 정의부터 말하자면 메모리의 구조란프로그램이 실행될 때 운영체제가 프로그램에게 제공해 주는 공간의 구조이다. 개발에 있어서 이 메모리 구조라 함은 코드를 이해함에 있어서 굉장히 중요한 내용이자어쩌면 상식 중에서도 상식이라고 할 수 있다. 우리가 아무 생각 없이 사용하는 변수들이나 코드들까지 모두 메모리의 어딘가에 0과 1로써저장된다는 사실을 알고는 있을 것이다. 하지만 이들이 정확히 어디에 저장되는지는별로 알 필요가 없다고 생각할 수 있다.당연히 메모리 커널의 몇 번 줄에 몇 번 칸부터 몇 번까지 딱딱 들어있는지 알필요는 없으나어느 영역에 들어가 있는지는 알 필요가 있다. 왜 알아야 하는지에 대한 얘기는 이쯤 하고 설명하겠다. 우선 이 메모리 구조란 놈은 앞서 언급했듯이프로..
-
[ 개발 잡소리 ] HashCode와 String (Java 잡소리)
Java의 System객체에는 IdentifyHashCode()이 있고모든 Object를 상속받은 자료형에는 HashCode()라는 기본함수가 들어있다. 뭐가 다른 걸까?System.IdentifyHashCode()이 녀석이 뭐 하는 놈이냐면 () 안에 들어온 객체의 메모리를 기반으로 하는 해시코드를 뽑아서 반환해 준다.단순히 주소를 보기 쉽게 숫자로 싹 한번 바꿔서 보여주는 애라고 알면 된다.따라서 동일한 객체라도 두 번 생성되면다른 메모리 주소를 가지므로 다른 identifyHashCode해쉬를 반환한다. HashCode()그러면 이 해시코드란 놈은 뭐 하는 놈인가 기본적으로 해시코드는 객체의 내용에 따라서 생성된다.Object클래스에서 상속받아 구현된 메서드로 모든 객체에서 사용할 수 있는기본함수(..
Others
-
[ 게임 개발 ] 유니티 쉐이더 그래프 3 - Dissolve Shader
Dissolve란?이런 것이다.흔히 게임 내에서 오브젝트가 파괴되거나 적이 사망하여 소멸될 때 등등사용처가 굉장히 많고, 꽤 만들기도 간단한 기능이다.함 만들어보자준비우선 Unlit으로 쉐이더그래프를 하나 만들어주고 (Lit 해도 된다) 그래프 세팅은 Surface Type만Transparent로 바꾸어준다 Transparent가 무엇인지는 아트 직군이거나포토샵을 좀 다루어 보았다면 알 것이다.이것은 텍스쳐의 알파값이 0일 경우그 픽셀을 투명하게 처리할 것인지검은색으로 처리할 것인지를 정하는 것이다. 따라서 우리는 Dissolve 될 때 검은색이 되는 게 아니라투명하게 안 보여 야하기 때문에Transparent를 선택해 준다3D에서 쉐이더그래프를 만들었다면Fragment자리에 BaseColor와 Alph..
2024.07.15 16:44 -
[ 게임 개발 ] 유니티 쉐이더 그래프 2 - 시작하기
쉐이더 그래프로 쉐이더를 만들기에 앞서쉐이더그래프를 만들려면 URP로 프로젝트를 만들어 열어주어야 한다빌트인 렌더파이프라인과 URP의 차이점은 전 글에서 설명한 적이 있으니생략하도록 하겠다. 프로젝트를 만들고 나서쉐이더를 위한 폴더를 하나 만든 후 프로젝트 창에 우클릭,Create > ShaderGragh > URP로 와주면 뭔가 많다 이것들이 무엇인지 알기 위해서는 Lit과 Unlit이 무엇이고 뭐가 다른지 알아야한다 Lit은 빛 연산의 영향을 받아 명암이 존재하는 메테리얼의 종류이다Unlit은 주변 광원의 영향을 받지 않고, 보통 광원으로 사용하거나 빛나야 하는 오브젝트에 사용한다.왼쪽이 Lit 메테리얼을 적용시킨 오브젝트이고오른쪽이 Unlit 메테리얼 오브젝트이다 둘 다 기본색이 흰색으로 설정되어..
2024.05.25 17:21 -
[ 게임 개발 ] 유니티 URP
Universal Rendering Pipeline.줄여서 URP라고 한다 현재 유니티에서 지원하는 렌더 파이프라인은Built In,SRP (URP, HDRP)가 있다.이번에 설명할 URP는 주로 빛과 볼륨효과와 쉐이더를 통해 게임의 때깔을 올려주기 위해 사용한다고 생각하면 된다(사실 HDRP도 비슷한데 성능차이가 날뿐이다)URP를 사용하는 이유 중 큰 이유중 하나가광원효과와 쉐이더를 이용한 게임 때깔을 올리는 것인데이는 말로 설명하는 것보다 보여주는 것이 제일 효과가 좋다차이가 굉장하다배치수가 좀 오르기는 하지만그냥 입 다물고 URP를 쓸 수밖에 없는 이유가 이것이다..안 쓰면 게임 때깔이 나오기가 힘듦 또한 URP에서 지원하는 Shader Gragh로간단하게 노드만 깔짝대며 이쁜 이펙트를 뽑을 수 ..
2024.04.07 02:53 -
[ 게임 개발 ] 유니티 쉐이더 그래프 1 - 쉐이더가 무엇이고 왜 쓰는가
유니티에서 개발을 하다 보면2D든 3D든 게임이 원하는 만큼 때깔이 나오지 않아마음에 들지 않는 때가 있다. 또한 C#코드로 다트윈 깔짝대면서굳이 이렇게 까지 연출을 해야하나 싶을 정도로간단하고 반복적인 이펙트를 만들때 또한 존재한다 그럴 때 쉐이더를 활용하여 가볍고도 간단하게 원하는 깔롱 한 효과를 구현하여 보자 우선 쉐이더는 무엇일까이쁜 거? 맞는 말이다 쉐이더는 수학적인 연산을 통해 게임의 퀄리티를 올리고 이쁜 비주얼을 만들어준다여기서 중요한 점은 수학적인 연산인데,쉐이더가 가벼운 이유이기도 하다 쉐이더는 수학적인 공식이나 연산을 통해우리가 원하는 효과들을 구현하기 때문에파티클 시스템을 떡칠하거나 스크립트로 직접 포지션을 움직여가며 움직이는 것보다매우 매우 매우 빠르고 가볍다. 그런 쉐이더 중에서도..
2024.04.10 19:49