일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- c#
- Unity2D
- BFS
- Unity
- Photon
- unityui
- FSM
- UE4
- Inventory
- 내일배움캠프
- 구현
- 스파르타내일배움캠프
- Unity3d
- 문자열
- 워크플로
- Firebase
- 프로그래머스
- 해시
- QueryDSL
- C++
- 이분탐색
- 알고리즘
- 유니티
- UnrealEngine
- 순열
- 스택
- 스파르타내일배움캠프TIL
- 포톤
- 유클리드호제법
- 언리얼엔진
- Today
- Total
목록c# (7)
개발 낙서장
유니티를 기반으로 개발한 2D 게임이고 포톤 서버를 이용하고 파이어베이스를 연동한 실시간 1:1 대전 게임이다 회원가입, 로그인, 유저 정보, 채팅 시스템, 무기와 업그레이드 선택 등의 기능이 구현돼 있다. https://github.com/SeungJun-Kwon/Unity2DShootingGame 로그인 회원가입과 로그인은 FirebaseAuth와 FirebaseFirestore에서 검증해 통과하면 성공하는 방식으로 구현했다. 둘 다 방식이 비슷하므로 로그인을 기준으로 설명하면 ID와 PW가 잘 입력이 됐는지 FirebaseAuth의 SignInWithEmailAndPasswordAsync가 잘 진행이 됐는지 해당 유저의 정보가 FirebaseFirestore에서 로드가 되는지 3가지 검증 과정을 거..
저번에는 정말 간단하게 캐릭터 좌우 움직임과 점프를 구현했다. 그럼 움직임은 여기서 끝인가? 하면 절대 절대 아니다. 나중에 멈춰있어야 하는 동작, 일정 거리만큼 움직이는 동작 등 이동에 제약이 발생하는 동작들이 추가될 경우 문제가 많아질 것이다. 그럼 이것을 어떻게 해결하냐? 유한 상태 머신(Finite State Machine)을 통해 해결할 수 있다. 유한 상태 머신(Finite State Machine) 유한 상태 머신이란 간단하게 오브젝트에 유한한 상태를 부여하고 입력에 따라 현재 상태를 변화시키며 각 상태에 맞는 출력이 이루어지는 패턴? 모델?이라고 한다. 자세한 설명은 다른 블로그나 커뮤니티에 많이 있으니 생략하고 바로 구현해 보자 public enum State { IDLE, MOVE, A..
이번에 간단한 3D 게임 포트폴리오도 허접하긴 하지만 끝났고 나중에 실무에 들어가게 되면 다양한 분야의 개발을 할 수 있어야 하니 이번엔 2D에 대해 공부해야겠다고 생각이 들었다. 여러 에셋들은 대부분 유니티 에셋 스토어에서 받아서 사용했다. 캐릭터 일단 키 조작을 통해 움직이는 캐릭터를 구현해 보도록 하자. 움직임에는 크게 두 가지 방법이 있는 것으로 알고 있는데 하나는 transform을 이용하는 방법, 하나는 Rigidbody 물리 효과를 이용하는 방법이 있다. 둘 중 하나만 사용하던 두 가지를 전부 사용하던 일단 필요한 컴포넌트들은 부착해줘야 한다. 유닛 2D 모델에 Collider 2D와 Rigidbody 2D를 부착하고 값을 간단히 조정해 주면 준비는 끝났다. Rigidbody2D _rigid..
구현 동기 퀘스트가 있는 게임에서 퀘스트 표시가 없는 게임은 아마 없을 것이다.(있나? 한 두 개쯤은 있을 수도) 유저 입장에선 당연히 퀘스트 표시가 있는 대로 따라갈 것이라 가시성은 물론이고 설계 또한 잘해두어야 한다. 어찌 됐건 저번에 퀘스트를 만들었으니 오늘은 NPC에 퀘스트 표시를 달아보도록 하자. 구현 내용 설계 먼저 현재 내 게임에서 NPC, Quest, Player 간 데이터 관계도를 정리할 필요가 있을 것 같다. Quest와 NPC는 Scriptable Object로 존재하며 실제 게임에 배치되는 NPCAI 스크립트에서 정보를 가지고 사용한다. 플레이어는 퀘스트를 수락할 경우 별도의 진행 데이터를 갖고 있어야 하기 때문에 Quest 정보를 QuestData로 변환(?)하여 QuestMana..
구현 동기 퀘스트를 만들었으면 NPC와 대화해 수락, 진행, 완료를 할 수 있어야 한다. 특정 조건을 만족하면 자동으로 완료되는 퀘스트들도 있지만 나는 NPC를 통해서만 수락, 완료가 되도록 했다. 구현 내용 대화 UI 우선 NPC에게 말을 걸었을 때 나타나는 UI를 가장 먼저 만들어야 한다. 대화 UI는 이 UI 하나에서 대화, 퀘스트 보기, 수락, 완료 등이 다 진행되도록 구현했다. 지금 와서 보니 조금 난잡하기도 하고 어느 정도 수정이 필요해 보이긴 하지만 일단 기능에는 문제가 없으니... 이렇게 UI를 다 만들었다면 동작하게 할 스크립트가 필요하다. 나는 대화 UI도 간단한 상태 패턴으로 구현했다. 먼저 Enum으로 현재 UI의 상태들을 정의해줬다. 이 UI에 존재하는 모든 버튼을 누르면 호출되는..
마법의 엘리베이터 https://school.programmers.co.kr/learn/courses/30/lessons/148653 문제 설명 마법의 세계에 사는 민수는 아주 높은 탑에 살고 있습니다. 탑이 너무 높아서 걸어 다니기 힘든 민수는 마법의 엘리베이터를 만들었습니다. 마법의 엘리베이터의 버튼은 특별합니다. 마법의 엘리베이터에는 -1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이 적힌 버튼이 있습니다. 마법의 엘리베이터의 버튼을 누르면 현재 층 수에 버튼에 적혀 있는 값을 더한 층으로 이동하게 됩니다. 단, 엘리베이터가 위치해 있는 층과 버튼의 값을 더한 결과가 0보다 작으면 엘리베이터는 움직이지 않습니다. 민수의 세계에서는 0..
구현 동기 퀘스트 없는 RPG는 존재하지 않는다. 꼭 위 사진과 같은 형식의 퀘스트가 아니더라도 게임을 진행하는 데에 있어 플레이어가 반드시 해야 하는 행동이나 달성해야 하는 조건 등 또한 퀘스트(혹은 미션)이다. 제 아무리 간단한 게임이라도 게임에 목표가 있으며 목표에 도달하기 위해서는 조건이나 행동들을 만족해야 한다는 것이다. 그래서 나도 간단하게나마 퀘스트를 구현해야겠다고 생각했다. 구현 내용 우선 퀘스트는 정말 여러가지 형태로 만들 수 있는데, 나는 퀘스트를 타입 별로 나누는 식으로 설계했다. 나누는 기준은 퀘스트 달성 조건으로 몬스터를 잡는 헌팅 퀘스트, NPC와 대화하는 대화 퀘스트 두 가지로 구성했다. 정말 간단하게 구상했지만 그래도 들어가는 변수가 꽤 있는데, 변수의 기능은 다음과 같다. ..