728x90

Unity 33

Unity 팀 프로젝트(2) : 발표와 회고 - TIL#28

# 우리 팀의 시연 영상 https://youtu.be/5rtcWZLyd60 # 피드백 FPS가 갑자기 늘어나는 현상이 있는데 프레임을 고정으로 하는 기능이 있으면 좋을 것이다. 벽에 부딪혔을 때 게임 이펙트를 더 줬으면 좋았을 것 같다. 게임이 어떻게 진행되는지 처음 보면 알기 어려운 부분이 있기 때문에 처음에 알려주면 좋을 것 같다. # 회고, 일주일 간 프로젝트를 진행하며 발표 후 느낀 점 아쉬웠던 점 1. 일단 Notion 작성할 때 트러블 슈팅 항목을 따로 만들었을 정도로 처음에 신경을 많이 썼지만, 마감 이틀 전인 29일, 30일에 대부분 항상 하던 작업을 하고 버그 잡는 것이 대부분이라 Notion에 신경을 많이 못 쓴 사실이 있었다. 결과적으로 트러블 슈팅에 대한 자세한 사진 자료나 코드가..

Unity 팀 프로젝트 : 버그 찾고 마무리하기 - TIL#27

오늘의 문제 상황 문제 원인 JsonUtility가 Dictionary나 Struct 구조를 직렬화(Serialize)하지 못해 생긴 일 해결 방법 Package Manager에서 Newtonsoft.Json 패키지를 설치한다. Dictionary 자료 구조의 경우 Seriealizable 하지 않기 때문에 직렬화를 하려면 다른 방법을 찾아서 여러 복잡한 처리를 해주어야만 한다. 그러나 ‘플레이어 이름 - 최고 기록’ 정보만 묶어서 같이 저장하면 어떤 데이터 형식이든 상관은 없기 때문에 굳이 Dictionary 자료형을 쓸 필요가 없다. 따라서, saveRankingData 클래스의 내부 데이터 형식을 List 형식으로 변경했다. 여기서 RankingData는 플레이어 이름과 최고 기록 정보를 저장하는 ..

Unity 팀 프로젝트 : Invoke의 사용법, BPM 계산 - TIL#26

어려웠던 점 & 문제 상황 1. BPM 계산이 조금씩 계속 어긋나는 현상 문제 상황 BPM(Beats Per Minute, 분당 비트 수)에 맞춰 플레이어 hp UI가 작아졌다 커지도록 하려고 했지만 무슨 이유에서 인지 계산 식은 정확하나 계속 애니메이션과 박자가 맞질 않는 것이었다. 원인 추정 박자 하나가 가지는 길이는 60초 / BPM 이다. 가령 BPM이 120이라면 4분박 하나 당 0.5초의 길이를 가진다. 그래서 내가 작성했던 코드는 일종의 반복문을 만들고 박자 하나 만큼의 길이를 넘는 조건을 만족하면 시간이 0으로 초기화 되는 방식이었다. private void CheckBPM(int bpm) { chunk = 60f / bpm; timer += Time.deltaTime; if (timer ..

Unity 팀 프로젝트 : 카메라 줌 인/아웃, 플레이어 HP UI 만들기 - TIL#25

오늘의 개발 상황 요약 영상에서 확인 가능하듯이 카메라의 줌 인/ 줌 아웃을 값으로 조절할 수 있게 했고, 플레이어의 HP 값에 해당하는 방사형 게이지 UI를 중앙에 추가했다. Player.cs에서 값을 가져와서 현재 플레이어의 HP를 나타내는 UI다. 줌 인/아웃의 원리는 어제 계산했던 3차원 좌표의 확장이다. 여기서 할당된 상수인 '10' 이라는 값은 기울기가 0일 때 최초의 카메라 위치의 z축 절대값이었다. 그래서 이 상수만 변수로 바꾸어 조절할 수 있게 하면, 자연스레 카메라의 줌 인/아웃이 구현되는 것이다. 추가로 구현을 맡은 Ranking이다. 원본 게임에서도 랭킹을 통해 자신과 다른 사람의 기록을 겨룰 수 있다. RankingScene을 만들어 RankingManager를 통해 복사 가능한 ..

Unity 팀 프로젝트 : 카메라 회전과 기울임 기능 추가하기 - TIL#24

오늘의 개발 상황 요약 오늘은 카메라 기능(회전, 기울임 등) 구현에 중점을 두고 개발에 착수했다. 위 사진은 게임 시작 전 탑 다운 뷰로 수직으로 정육각형을 수직으로 바라보는 모습이다. 게임 시작을 하는 동시에 카메라가 처음에 설정한 40도로 기울어지며 기울어진 평면을 따라 일정하게 육각형 주위를 돌아 마치 육각형이 도는 듯한 연출을 보여준다. 영상을 보면 기울어진 각도, 회전 속도, 회전 방향 등을 구현해놓은 것을 볼 수 있다. private 변수 직렬화 '[SerializeField]'를 이용해 Inspector 내에서 자유롭게 수정하며 테스트 할 수 있게 했다. Tilt Angle은 기울어짐 정도, 단위는 degree이고 범위는 1에서 90이다. Rotation Speed는 회전 속도이고, 범위는..

Unity 팀 프로젝트 : 개발 방향 결정, 임무 분담 - TIL#23

오늘의 개발 상황 요약 새로운 팀 프로젝트를 진행하는데 있어서, 우리 팀은 투표로 고전 게임 중 '똥피하기'와 맥락 상 비슷한 게임을 찾아 재해석하기로 했다. 그 중 'Super Hexagon'이라는 추억의 게임을 재해석하기로 했다. Git Commit 규칙을 정하고 역할 분담을 했다. 내가 맡은 역할은 UI, UX(디자인), 카메라, GameManager이다. 게임 플레이 시 플레이어에게 보여지는 UI인 'InGameUI' 게임오버 시 플레이어에게 보여지는 UI인 'GameOverUI' 그리고 테스트 용으로 만든 'GameOverButton'을 만들었다. InGameUI 좌측 상단엔 게임 진행 시간, 현재 레벨과 레벨명이 보여진다. 우측 상단엔 최고 기록을 보여주는데, 아직 구현 전이다. GameOve..

개인과제 : Unity로 메타버스 환경 카피하기 - TIL#22

(오늘의 완성된 개인 과제. 제목은 사나이 클럽이다.) 구현한 요구사항 필수요구사항 캐릭터 만들기 ✅ 캐릭터 이동 ✅ 방 만들기 ✅ 카메라 따라가기 ✅ 캐릭터 애니메이션 추가 ✅ 이름 입력 시스템 ✅ 캐릭터 선택 시스템 ✅ 선택요구사항 시간 표시 ✅ 인게임 이름 바꾸기 ❌ 참석 인원 UI ✅ 인게임 캐릭터 선택 ❌ NPC 대화 ❌ 어려웠던 점 & 오류 상황 1. Scene끼리 정보 전달하기 [오류 상황] InitScene에서 MainScene으로 넘어가는 과정에서 입력한 이름을 어떻게 전송을 하나 고민을 했다. 그래서 구글링 한 결과 DontDestroyOnLoad 라는 메서드를 알게 되었고 'SceneVar'라는 변수 저장용 EmptyObject를 만들어서 별도의 'SceneVariable'이라는 스크..

객체 지향 프로그래밍, Unity 개인 과제 - TIL#21

객체지향 프로그래밍 특강 절차지향 프로그래밍? 레벨, 체력, 공격력, 방어력 등의 동일한 속성의 변수들이 몬스터 같은 객체들이 추가될 때마다 비슷한 코드가 반복되고 길어지는 현상이 생김 이걸 배열로 반복 처리는 가능 문제1 - 데이터 구조 파악의 복잡함. 문제2 - 중간에 데이터 추가가 필요하다면?? 가독성 저하 -> 코드 이해가 어려움 -> 버그 발생이 빈번해짐 -> 유지 보수가 힘듦 객체지향 프로그래밍 동일한 목적이나 기능을 하는 변수와 함수들을 하나로 묶어서 관리한다 연관된 데이터 묶기 객체 사용으로 코드가 간결해짐 가독성 증가 -> 코드 파악이 쉽다 길어 질 수 있는 코드를 나눠서 관리, 코드 관리에 좋음 -> 코드 분석 쉬움, 협업에도 유리 목적에 맞게 기능도 포함가능 -> 함수 사용 1. 목적..

Unity 게임 개발 입문 : 탑다운 슈팅 프로젝트 - TIL#20

오늘의 알고리즘 문제 [제일 작은 수 제거하기] 문제 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. public class Solution { public int[] solution(int[] arr) { if (arr.Length == 1) { int[] answer = new int[1]; answer[0] = -1; return answer; } else { int[] answer = new int[arr.Length - 1]; int minidx =..

Unity 입문하기, 세팅과 기본 조작 - TIL#19

오늘은 오류 발생과 문제 해결이 일어날 만한 활동을 하기보다는 Unity 입문 강의를 수강하는데 초점을 맞췄으므로 이에 맞춰 글을 쓰기로 했다. (아직 전체 완강을 하지 못해서 간단한 내용만 정리한 뒤 나머지는 내일 올리기로 한다.) 게임 엔진은 게임 개발을 매번 기초부터 하게 되면 상당한 시간적 손해가 발생하기 때문에 개발에 있어 강력한 도구와 기능적 편의를 제공한다. Unity 또한 게임 엔진이기 때문에 쉽고 강력한 기능들이 들어있어서 게임 개발에 자주 이용된다. 새 프로젝트를 만들어서 열어보면, 처음 상태는 다르겠지만 보통 다음과 같은 구조를 하고 있다. (다음 설정은 Window 탭 > Layouts > 2 by 3 이다.) 각 창의 기능을 대략적으로 요약하면 다음과 같다. Scene : Unit..

728x90