1달동안 정신없이 만들다 보니 완성하고 어떻게 만들었는지 정리 해보게 되었다.
완성은 약 2주정도 전에 됐고 졸업논문 작성 및 다른 과목 플젝 진행하느라 시간적 여유가 없었던 것같다.
플레이영상은 용량이 커서 유튜브에 올려놨다.
스케일이 작아서 그런가 연산량이 많아 보이지는 않았다.
대단한건 없으니 기대하진 말자.
https://www.youtube.com/watch?v=tda-RyE9DS4
만들 때 마다 들었던 생각인데, 발디의 수학교실을 만들고 있는것 같았다. 차라리 공포게임 장르로 갔으면 어땠을까... 가성비도 좋을것 같기도하고. 최종보고서 작성하면서 개발 했던 내용을 정리 했다.
https://github.com/sjmjys954646/Capstone2_game
GitHub - sjmjys954646/Capstone2_game
Contribute to sjmjys954646/Capstone2_game development by creating an account on GitHub.
github.com
코드들은 여기서 확인 할 수 있다.
[StartScene]
[EndScene]
버튼이동이랑 크레딧정도 말고는 어려움이없다.
[InGameScene]
시스템 목차
1. 캐릭터
1-1. 캐릭터이동
유니티 내부 물리엔진 TransformDirection
1-2. 점프
유니티 내부 물리엔진 addforce
땅에 있는지 여부를 raycast로 확인
1-3. 회전
유니티 내부 물리엔진 rotation
1-4. 1, 3인칭 변환
Camera rig를 두개로 분리해서 회전할때
Camera rig를 인칭별로 함께 돌린다.
1인칭회전 3인칭 회전이 다름 코드참고
1-5. 커서 변환
유니티 엔진 내부 커서함수
1-6. 대화 및 아이템 상호작용
유니티 콜라이더를 이용하여 키를 누른 순간 충돌여부확인
키를 계속 누르고 있는 동안 트리거 되는것을 방지하기위해
코루틴을 이용하여 쿨타임 처리
2. 이동과 입력의 분리
퍼즐 진행중에 이동 하는 등의 일을 관리하기위해서
플레이어 내부에서 이동 코드를 inputmanager로 분리
그 외에 대화창넘기기 등의 입력
2-1. 상하좌우 이동
2-2. 커서토글
2-3. 시점변경
2-4. 점프
2-5. 아이템창
2-6. 대화창 넘기기
3. 인벤토리 및 아이템
3-1. 아이템 excel 파싱
아이템 및 대화 dialogue는 엑셀을 파싱해서 사용함.
파싱한 내용을 각 형태에맞는 자료구조에 넣어서 사용.
csv리더 코드를 유니티에 맞게 변경
3-2. 전체 아이템 리스트
List 자료구조에 item 클래스를 만들어서 삽입
3-3. 인벤토리 UI
아이템획득시 인벤토리에 Add() 함수
인벤토리 내부 아이템과 UI 아이템 개수가 맞지 않을시 Refresh() 함수
4. 대화창 및 대화 시스템
4-1 dialogue excel 파싱
아이템과 같은 방식으로 파싱.
4-2 대화창 시스템
대화시스템과 아이템창 설명의 원리는 동일
대화 시작 -> 게임매니저에게 대화중을 알림 -> 분리해둔 inputmanager가 입력을 방지
-> 대화창넘기는 입력시 텍스트 변경 -> EOF 시 종료
4-3 NPC
NPC한테 상호작용할 경우 StartConversation(해당 대화 번호)를 실행하여 대화를한다.
각 NPC별로 특수한 내용이 있을경우 이 class를 상속받아서 override한다.
5. 퍼즐 시스템
5-1. 퍼즐매니저
퍼즐의시작, 종료, 입력제한, 커서 생성의 역할은 맡는다.
퍼즐제목 및 학습목표는 코루틴으로 생성
5-2. 각퍼즐별매니저
모든퍼즐매니저가 이 class를 상속받는다.
해당 클래스에는 퍼즐의 정답처리, 정보제공, 정답시 상호작용등을 가지고있다.
5-3 각각퍼즐
각각의 퍼즐은 상이하게 구성되어있으며 이는 코드를 참고해야한다.
6. 퍼즐에서 마우스 시스템
6-1. 마우스 드래그 및 구현
유니티 eventsystem의 pointerhandler 사용
누른물체를 cursormanager에게 전달 및 갱신
6-2. 정답처리
코루틴을 이용하여 최근 누른물체와 정답빈칸의 index를 확인하여 정답인지 확인
7. 캐릭터 선택 시스템
자료구조 deque의 형태로 구현
선택완료시 해당데이터를 gamemanager에게 전달
8. 게임매니저
게임의 현재 상태 및 시나리오 위치 저장
9. 시나리오 / 튜토리얼
노가다
[사용한 Asset]
SimpleNaturePack
SimpleFXKit
TextMeshPro
FREE LowPolyHUman
RPG Poly Pack
후기 :
1. 알고리즘 공부
작년 icpc 본선 이후에 공부의 필요성을 느끼고 지금도 꾸준히 문제를 풀어가고있다. 확실히 구현하는데 있어서 어려움을 느끼는 부분이 많이 줄어들었다.
2. 객체지향
커다란 시스템들, 아이템이나 NPC들이나 이러한 것들을 구상하는데 있어서 생각보다 전에는 사용하지 않았던 상속이나 다형성들을 많이 사용했던 것같다. 이는 아마도 경험적으로 이걸 사용해야 나중에 도움이 될것이다 라는 느낌을 주었던 것같다. 더 많은 경험을 해보면 더 다양한 기술및 디자인패턴까지 사용할 수 있을 것 같다.
3. 3D 게임 개발
지금 까지 해보지 않았던 도전이었기 때문에 더 오래걸렸고 물리 엔진이나 등이 2D에 비해서 연산량이 많기 때문에 우리 게임에서는 간단했지만 더 어려운 게임을 만들려하면 생각할게 많을 것 같다.
4. 아쉬움
이번에는 1인 개발로써 거의 대부분을 내가 급하게 설계하고 구현하느라 비효율적인 부분도 많고 리팩토링할 시간적인 여유도 없었다. 서비스할 프로젝트가 아니기 때문에 확장성 등에 크게 생각하지 않고 짰던 것도 있는 것 같다. 팀을 통해 개발의 부담을 줄이는 것도 느껴보고 싶다.
'프로그래밍 > 게임개발' 카테고리의 다른 글
Godot Engine 사용기 1 (0) | 2024.11.08 |
---|---|
4학년 1학기 플젝 리뷰[가상현실] (0) | 2023.06.25 |
캡스톤 게임개발 이야기 2 (0) | 2023.05.03 |
캡스톤 게임개발 이야기 1 (0) | 2023.04.28 |
3학년 2학기 플젝 리뷰[캡스톤프로젝트] (0) | 2022.12.23 |