일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구현
- Firebase
- 내일배움캠프
- 포톤
- 순열
- C++
- Unity2D
- Inventory
- Unity
- 스파르타내일배움캠프
- QueryDSL
- 유클리드호제법
- 프로그래머스
- FSM
- UE4
- UnrealEngine
- c#
- 유니티
- unityui
- Photon
- 문자열
- 이분탐색
- 스파르타내일배움캠프TIL
- 해시
- 스택
- BFS
- 언리얼엔진
- 알고리즘
- Unity3d
- 워크플로
- Today
- Total
목록유니티 (15)
개발 낙서장
애니메이터의 boolean형 파라미터로 isMoving이 있다고 하자. 해당 파라미터가 true가 되면 애니메이션 State가 Move로 바뀌고 false가 되면 Idle로 바뀌게 구성을 해놓았을 때, 코드에서는 이렇게 호출할 것이다. public void Idle() { _animator.SetBool("isMoving", false); } public void Move() { _animator.SetBool("isMoving", true); }이렇게 애니메이터의 파라미터를 문자열로 전달하게 되는데, 이 과정에서 매번 문자열 -> 해시로 변환이 이루어지기 때문에 호출이 빈번할수록 성능에 안 좋은 영향을 끼치게 된다. 따라서 사용하는 것이 Animator의 StringToHash 메소드인데 애니메이터의 ..
유니티를 기반으로 개발한 2D 게임이고 포톤 서버를 이용하고 파이어베이스를 연동한 실시간 1:1 대전 게임이다 회원가입, 로그인, 유저 정보, 채팅 시스템, 무기와 업그레이드 선택 등의 기능이 구현돼 있다. https://github.com/SeungJun-Kwon/Unity2DShootingGame 로그인 회원가입과 로그인은 FirebaseAuth와 FirebaseFirestore에서 검증해 통과하면 성공하는 방식으로 구현했다. 둘 다 방식이 비슷하므로 로그인을 기준으로 설명하면 ID와 PW가 잘 입력이 됐는지 FirebaseAuth의 SignInWithEmailAndPasswordAsync가 잘 진행이 됐는지 해당 유저의 정보가 FirebaseFirestore에서 로드가 되는지 3가지 검증 과정을 거..

아이템을 누르면 마우스 위치에 해당 아이템 복사본이 생성되어 마우스를 따라다니고 이걸 이동, 드랍, 장착 등의 동작에 사용하려고 했는데..... 이런 어처구니 없는 상황이 발생해버렸다. RectTransform.localPosition = Input.mousePosition; 딱 한 줄의 간단한 코드라 뭐 어디 잘못된 것도 없어서 좀 당황했다. 그냥 position으로도 바꿔보고 anchoredPosition으로도 바꿔보고 오브젝트 설정도 바꿔보고 했는데 잘 안돼서 이거저거 바꿔보고 검색해본 끝에 해결했다. 먼저 내 UI 세팅이다. 메인 카메라에 의해 렌더링돼도록 했고 여러 해상도에 반응하기 위해 Canvas Scaler를 달아주었다. 여기서 아마 저 Render Mode가 Screen Space - C..

구현 동기 딱히 동기랄 것도 없다. 아이템이 없는 게임은 거의 없다! 기본 구조 스크립트는 크게 3개 정도로 구성했다. Item의 정보를 담는 클래스 UI에 보여지는 아이템 슬롯 클래스 인벤토리 전체를 관리하는 클래스 가장 중요한 클래스는 인벤토리 전체를 관리하는 클래스이다. 여기서 인벤토리 관련 모든 동작(Save & Load, 정렬, 이동 등)이 이루어지기 때문에 짜임새 있게 작성해야 한다. ItemSO 어차피 아이템의 고유 ID 혹은 이름으로 정보를 저장하고 불러올 것이기 때문에 정말 기본적인 정보들만 기입했다. 이 ItemSO는 나중에 파이어베이스의 파이어스토어에서 정보를 가져와 캐싱하는 스크립트가 될 것이다. ItemSlot public class ItemSlot : MonoBehaviour, ..

구현 동기 유니티 2D를 공부하면서 간단한 멀티 시스템도 같이 공부해보자 싶어서 포톤 서버로 2D MMORPG 쪽으로 만들어보자고 생각했다. 2D MMORPG 하면 정말 여러 가지 게임이 있지만 가장 대표적으로는 역시 메이플스토리가 가장 먼저 떠오른다. 메이플 스토리의 멀티 시스템은 메인 로비에서 서버(스카니아, 제니스 등등)를 선택하고 채널을 선택한 이후 캐릭터를 선택하면 게임을 플레이할 수 있다. 나는 기초적인 멀티 시스템만 구현할 것이기 때문에 채널을 선택해서 게임 화면에 진입하는 것까지만 구현하려고 한다. 채널 유니티에서 간편하게 사용할 수 있는 서버 패키지인 포톤이 있다. 패키지를 프로젝트에 임포트한 후 가이드에 따라 사용하면 된다. 포톤 서버는 기본적으로 "룸"을 기반으로 동작하는 네트워크이다..

저번에는 정말 간단하게 캐릭터 좌우 움직임과 점프를 구현했다. 그럼 움직임은 여기서 끝인가? 하면 절대 절대 아니다. 나중에 멈춰있어야 하는 동작, 일정 거리만큼 움직이는 동작 등 이동에 제약이 발생하는 동작들이 추가될 경우 문제가 많아질 것이다. 그럼 이것을 어떻게 해결하냐? 유한 상태 머신(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..