midas+son의 크리에이티브(creative) 이야기

게임명 : 마리오 3D Run

개발 언어 : C#

개발 환경 : Unity 5.3, Visual Studio 2015 Express

제작 기간 2016. 6. 1 ~ 2016. 6. 7(1주)

제작 인원 : 1명 (손정현(본인))


역할 : 모델링을 제외한 모든 작업


[스크린샷]







[동영상]

유튜브 주소 : https://youtu.be/AD_t-b5fo-I




배운 점 및 느낀점 : 

1. 리소스 구하는게 너무 늦어 퀄리티가 낮아진 것이 아쉽다.

2. 유니티는 홈페이지에서 매뉴얼이 있어서 접근이 쉬워 개발 중 이슈에 대응이 빨랐다.

3. 기본 3D 물리 엔진이 있어 개발이 편했다.

4. 짧은 시간에 유니티의 많은 기능을 모르고 만들다 보니 난해한 부분도 많았지만 끝까지 해내어 즐거웠다.



프로젝트가 끝나고 스스로 나아진 점 :

1. 유니티의 기본적인 물리 처리(Rigidbody) 및 trigger사용의 노하우

2. Scene이동에 따른 오브젝트 처리

3. 하나의 display에 여러가지 Camera의 View 합하는 방법

4. 하드 코딩이 아닌 게임 엔진으로 게임을 만드는 경험

게임명 : 데드풀(DeadPool)

개발 언어 : C++ , Direct3D

제작 기간 : 2016. 4. 5 ~ 2016. 5. 1 (4주)

제작 인원 : 4명 (손정현(본인), 김민제, 박현세, 송정훈)


본인 프로그래밍 담당 : 몬스터 AI, 몬스터 셰이더, 몬스터 Progressbar


본인 외 팀원 역할 : 

김민제 (맵, 맵툴, 길찾기)

박현세 (플레이어, 조작, 플레이어 셰이더)

송정훈 (팀장, UI, 상점, 타이틀, 로딩 쓰레드, 영상제작)


[스크린샷]


[동영상]


유튜브 주소 : https://youtu.be/wBxs7nXzYCw




배운 점 및 느낀점 : 

1. 3D가 2D평면에 보여지는 원리(3D게임 Render의 기본 원리)

2. Render의 횟수를 최소한으로 줄이는 방법(frustum culling, quadTree)

3. 3D의 충돌은 Sphere충돌과 Box 충돌(OBB, AABB) 

4. 3D게임에서의 카메라 개념

5. 블소, 테라, 클로저스, 데드풀, 마영전 등 게임을 Unpack하여 열어봤지만 모델링 + 애니메이션까지 순수히 사용할 수 있는건 테라와 데드풀 정도

6. 2D게임보다 많은 것을 생각해야 됨

7. 3D게임의 기본을 정착시킨 개발자들은 천재들이 분명함

8. 애니메이션이 있는 X파일 구하기 힘듦

9. 셰이더 공부를 따로 하고 싶음


프로젝트가 끝나고 스스로 나아진 점 :

1. 3D의 원리 숙지

2. World와 local좌표의 구분 차이 및 필요 이유 습득

3. float 계산은 GPU에게 맡겨 더 빠르게하고 Rendering 그래픽 품질을 더 좋게 하기 위한 셰이더 기술에 대한 기초 습득

4. 3D상의 벡터, 내적, 외적의 사용법 과 Lerp

5. Z 축 자동 계산이 안필요 할때(모델링을 투명화 시킬때에는 별도로 뺴서 나중에 해야함)






게임명 : 에일리언 타워 디펜스 (플래시 게임 원작)

사용 언어 : C++ (WinApi)

제작 기간 : 2015.12. 23 ~ 2015. 12. 30 (1주)

제작 인원 : 4명 (손정현(본인), 오창소, 김민제, 이두리)

본인 프로그래밍 담당 : 인게임 플레이어 영역(플레이어 UI, 타워 시스템, 액티브 스킬)


[스크린샷]


[동영상]

유튜브 주소 : https://youtu.be/wurYygQ9A0k



배운 점 및 느낀 점 :

1. png 이미지를 사용하면 퀄리티가 더 높고 비트맵보다 용량이 적어짐.

2. 크리스마스의 연휴가 껴서 작업 시간이 많이 없었지만 밤을 새면 어떻게든 됨을 느낌

3. 따로 하는 것보다 모여서 하면 일의 능률 상승.

4. 플래시 게임 원작의 이미지를 그래로 다 가지고 올수 있어서 리소스 작업에 시간 투자가 거의 없었음.

5. 플레이어 UI가 깔끔하면 게임이 재밌어지고 친절함을 느낌.

6. 레벨, 데미지 벨런싱도 하나의 일.


프로젝트가 끝나고 스스로 나아진 점:

1. 팀원들간의 커뮤니케이션 능력 향상

2. 밤을 오래 샐 수 있는 체력.

3. 모르는 기능을 찾아낼 수 있는 구글링 실력.

4. 객체 지향 적 프로그래밍 기법 실력 향상.

5. 상속 관계의 클래스 사용법 숙달.




제목 : 아이작 리버스(isaac Rebirth)
사용 언어 : c++(WinApi)
제작 기간 : 2015. 12. 04 ~ 2015. 12. 11 (1주)

제작 인원 : 4명 (손정현(본인), 박현세, 송정훈, 이원욱)

본인 프로그래밍 담당 : 몬스터 매니져, 몬스터 6종 AI, 엔딩 작업


[스크린샷]

[동영상]

유튜브 주소 : https://youtu.be/NtfNpNQtt7g


배운 점 및 느낀 점 :

1. 처음 협업으로 만들어진 프로젝트라 시행 착오가 많았음. 

2. 개인이 코딩해야할 시간의 비율은 감소. 전체적인 투자 시간은 증가. 

3. 팀원들간의 커뮤니케이션이 중요. 의견이 어긋나면 시간이 배로 증가

4. 소통에 시간을 많이 투자해야 하는 것이 좋음.

5. 소스 통합 및 테스트에 시간이 더 오래 걸림. (각각 잘되어도 합치면 버그 발생)



프로젝트가 끝나고 스스로 나아진 점 :

1. 몬스터 제작 함으로 객체 프로그래밍에 대한 이해도가 높아짐.

2. 동일한 부모를 가지는 서로 다른 자식 클래스들의 컨트롤 방법을 터득. 상속 관계 클래스의 사용법이 능숙해짐.

3. 통합과정에서 다른 팀원의 소스를 분석함으로 얻은 디버깅 능력 향상.



제목 : 레이저 체스(Laser Chess)

사용 언어 : c++(WinApi)

제작 기간 : 2015. 11. 09 ~ 2015. 11. 16 (1주)

제작 인원 : 1명(팀장 : 손정현, 기획 : 손정현, 프로그래밍 : 손정현, 그래픽 : 손정현, 영상 제작 : 손정현)



[스크린샷]


[동영상]

유튜브 주소 : https://youtu.be/Jkj-R53KkWM


제작 하면서 느낀 점 : 

1. TV에서 나온 보드 게임을 직접 만들어서 구현해보니 만드는 내내 즐거웠다.

2. 보드게임에서 제일 어려운 것은 말이 움직이는 것이었다.

3. 사운드를 알기전에 작업해서 BGM과 이펙트를 넣지 못해 아쉬웠다.

4. 각 객체들의 init, update, render, release 각 함수 별로 역할을 나누어 처리한 첫 프로젝트로 게임의 기초 로직을 다지게 되었다.


프로젝트가 끝나고 스스로 나아진 점 :
1. 완전한 하나의 게임의 개발(시작 -> 게임 -> 끝이 존재)
2. Enum 속성으로 각각 class 컨트롤 하는 방법
3. 게임에 대한 로직 구현 방법(보드 게임이라 로직 구현이 더 중요한듯)
4. 렉트 충돌과 픽셀 충돌의 처리
5. 없는 리소스를 만들기 위한 포토샵 실력



 

게임명 : 라그나로크

개발 언어 : C++ , WinApi

제작 기간 : 2016. 01.11 ~ 2016. 02. 09(4주)

제작 인원 : 1명 (손정현)


본인 프로그래밍 담당 : 모든 작업


[스크린샷]

[동영상]

유튜브 주소 : https://youtu.be/gznkFAX-H5w



배운 점 및 느낀점 : 

1. 혼자서 한달 가까이 꾸준히 포폴을 진행 한다는 것은 무지 어려운 일이다.

2. 처음부터 상세한 일정을 잡지 않으면 중간에 일정이 뒤바뀐다.

3. RPG게임을 만들 때 싸우는 것 말고도 만들것이 많다.

4. Vector보다 List가 나을 때가 있다.(가변적으로 쓰고 빠질 때)

5. FMOD를 동시에 많이 틀면 먹통이 되더라.

6. 필요한 함수가 없거나 못찾겠으면 만들면 된다.


그 외 매일 포스팅 한 각 부분




프로젝트가 끝나고 스스로 나아진 점 :

1. 이전에는 vector만 썼는데 그외에도 STL을 성격에 맞게 사용

2. 세세한 버그까지 미리 예외처리를 생각

3. 매일 작은거라도 진행 시키는 꾸준함


이미 개발 된 것들 Detail 살리는 작업 및 마무리 준비


이제 다음 글은 

설연휴 지나서

최종 동영상 예정

◇ Astar 길찾기 개선
 - 매번 모든 Tile값들을 new로 동적 할당 하던 것을 ReSet()함수로 변경
 - 마우스 좌클릭으로 움직일 때마다 FPS가 떨어지는 것 개선 됨(FPS 50 이하 -> 58이상) 
 - STL중 크기가 일정치 않고 계속 변하는 Vector를 List로 변경
 - Close List에 있는 값을 모두 따라가는 것을 도착지에서 parentNode만 따라가도록 변경




오늘 작업 중 기억 남는 점
1. new를 할 때마다 부하가 많이 발생하므로 이미 있는 것들을 재활용 하는 것이 좋음
2. 벡터(vector)에 일정하게 push_back 할 때는 미리 reserve 로 크기를 지정해 주자
3. 보관할 양이 매우 가변적일 때에는 vector보다는 List가 더 용이함
4, vector는 지정된 양을 넘으면 메모리를 2배로 늘리면서 새로 복사됨을 기억하자











◇ 미니맵 추가

 - 우측 상단에 ALPHA값으로 맵 이미지 축소

 - 맵툴에서 변경한 대로 이미지 계속 변경

 - 현재 보고 있는 카메라 영역 표시


◇ 맵툴 타일 삭제 추가

 - 타일을 없애 검게 만듬

 - 검은 타일로는 이동이 안됨


◇ 플레이어 스킬 고도화

 - 세 분류로 나눔

 - 즉시 사용 : 이미 지정된 위치에 바로 사용됨(보통 플레이어 좌표) 

 - 대기 후 마우스 클릭시 해당 위치에 사용 : 원거리 마법 

 - 지속시간 동안 유지되는 스킬 : 버프 스킬

 - 버프 스킬의 경우 우측에 상태 아이콘과 지속 시간을 시각화

 - 스킬 매니져에서 각 분류에 따라 처리(간소화)

 - 각 분류마다 스킬 하나씩 완성(적 데미지 + 사운드 처리)




[영상 - 미니맵과 플레이어 스킬]

영상 설명 :

맵 이동에 따라 미니맵의 하얀 렉트가 이동하여 카메라 적용 영역을 알려줍니다.


스킬은 총3개로 

첫번째 스킬은 지속(유지)스킬입니다.

불어택인데 물리 데미지와 고정 마법데미지가 같이 몬스터에게 적용됩니다.

스킬 유지 시간동안 적용되며 

유지 시간안에 다시 사용하면 스킬 시간이 초기화 됩니다.


두번째 스킬은 현재 플레이어 위치를 중심으로 

반시계방향으로 폭탄들이 터지는 순차적 범위 공격입니다.

위치를 잘 맞추면 여러번 타격도 가능합니다.


세번째 스킬은 어스퀘이크(지진) 입니다.

스킬을 사용하면 마우스 포인트가 변하며

해당 위치에서 마우스 클릭을 다시 하면

원거리 범위 마법 공격이 발생합니다.

여러마리를 동시에 사냥 할때 유용합니다.




[만약 지속(유지) 스킬이 여러개였다면 우측 스킬셋팅이미지는??]

영상 설명 : 지속 스킬의 경우 중복 사용이 안되게 해놓았지만 

만약 지속유지 스킬이 여러개여서 쌓이게 된다면

우측의 스킬 셋팅의 이미지는 어떻게 될까? 하는 생각에 찍어본 번외 영상입니다.

스킬을 사용한 순서대로 10개씩 쌓이면서 이동합니다. 


오늘 작업 중 기억 남는 점

1. tga 포맷의 이미지를 사용하지 못해서 png로 바꾸는 방법

 - 일반적으로 변환되지 않아 구글링으로 프리웨어를 다운받아 하나하나 처리

 - 프로그램 이름 : ImageMagick Display

2. 버프 스킬 지속시간 시각화 할 때 유의 사항

 - 스킬 아이콘 이미지 위에 같은 크기의 검은 타일에 

 알파값을 주고 지속시간에 따라 

 검은 타일의 Height 값을 줄여 갔는데

 수학적으로 아래의 수식은 동일함

 i) 이미지 생성 y축 위치 + (이미지 높이 * ((Max 남은 시간현재 남은 시간) / Max 남은 시간))

 ii) 이미지 생성 y축 위치 + 이미지 높이 - (이미지 높이 * 현재 남은 시간 / Max 남은 시간)

 하지만 프로그래밍 적으로는 /(나누기) 할때 소수점이 소실 되므로 

 i)의 방법으로는 중간중간 1px에 대한 위치 오차가 발생

 ii)의 방법이 i)방법보다 공식이 안이쁘지만

 오차가 발생하지 않는 옳은 방법임


◇ 플레이어 스킬 시작

 - 스킬 매니져 설계

 - 스킬 스프라이트 작업(현재 까지 3종)

 - 몬스터 처리

 - 마우스 커서 이미지 추가

 - 스킬에 의한 타격 이미지 추가


영상은 스킬 몇가지 더 추가하고

사운드 넣고 내일 올리도록 하겠습니다.



* 내일 할일 - 플레이어 스킬 고도화