-
내일배움캠프 21일차 TIL - 스파르타타운 제작 마무리TIL/Unity 2024. 5. 14. 19:48
[학습목표]
스파르타타운 게임 제작을 마무리하고, 과제 해설 강의를 공부한다.
[학습내용]
일단 어제 필수 요구사항을 모두 구현했기 때문에, 오늘은 선택 요구사항에 도전했다.
시간 구현
이건 크게 어렵지 않았다. 텍스트 UI를 하나 추가하고, 현재 시간 정보를 받아서 띄워주기만 하면 됐다.
시간 정보는 System.DateTime을 이용했다. Time 클래스인가 잠깐 헷갈렸으나, 그건 아예 다른 곳에 쓰는 클래스였다.
현재 정보를 DateTime.Now로 받아와서, 알맞은 형식으로 출력해주면 해결되었다.
using System; using UnityEngine; using UnityEngine.UI; public class TimeUI : MonoBehaviour { private DateTime nowTime; private Text timeText; private void Start() { timeText = GetComponentInChildren<Text>(); } private void Update() { nowTime = DateTime.Now; timeText.text = nowTime.ToString("HH:mm"); } }
인게임 이름 바꾸기
필수 요구사항에서 이름 바꾸는 걸 먼저 해봤기 때문에, 크게 어렵지 않았다. 다만 재사용되는 부분이 많은 만큼 상속관계를 어떻게 하느냐에 따라서 코드가 더 깔끔해질 수 있을 거 같았다. 그래서 그 부분에 많이 시간을 투자한 거 같다.
기존에 하나에 있던 관련 기능들을 쪼개고 상속시켜서 구현했다.
이후에는 현재 접속 인원 리스트를 띄워주는 세 번째 기능을 구현하고 있었으나, 과제 제출시간이 되어 제출하였다. 그리고 조금 기다리자 개인 과제 해설 강의가 올라왔다. 강의에서는 필수 요구사항 구현까지만 다뤘다.
해설 강의
스프라이트 크기 조절
보편적으로 스프라이트 크기를 조절하는 방법은 3가지가 사용된다.
- 스프라이트 자체의 스케일을 변경한다. 선호되는 방법은 아니다.
- 카메라 사이즈를 변경한다.
- PPU(Pixel Per Unit) 값을 변경한다. 보편적으로는 스프라이트의 픽셀 수와 비슷하게 한다.
스프라이트 여백 조절
스프라이트의 너무 많은 공백이 문제가 된다면 스프라이트 에디터를 사용하면 된다.
(마우스 커서) 좌표
화면 왼쪽 아래가 (0, 0)이고 우측 상단으로 갈수록 좌표값이 커진다.
회전 종류 3가지
쉽게 된 설명이 있어서 적어본다. 누군가와 정면으로 마주선 상태라고 치면
- 끄덕 끄덕 (X축 회전)
- 도리 도리 (Y축 회전)
- 갸우뚱 (Z축 회전)
세 축이 헷갈렸는데 이거 때문에 외워질 거 같다.
콜라이더에 계속 부딪혔을 때 오브젝트가 떨리는 것 같이 보이는 이유
오브젝트의 좌표를 변경하는 식으로 이동을 구현하면 순간이동의 개념이 된다. 그러면 충돌 처리가 나기 전에 먼저 이동이 일어나기 때문에 뒤늦게 다시 밀려나는 식이 되는 것이다. 그래서 Rigidbody를 이용한 이동 방식을 구현하면 이러한 현상을 해결할 수 있다.
애니메이터 컴포넌트 위치
움직일 스프라이트가 있는 컴포넌트에 위치시키면 된다.
플레이 시 깜박거리는 현상
대부분은 레이어의 문제다. Order in Layer 값을 올려주면 된다.
Rect transform
- 앵커 프리셋을 그냥 클릭할 경우 앵커만 변경된다.
- alt + 클릭할 경우 자기 오브젝트의 위치도 바뀐다.
- shift + 클릭할 경우 피벗의 위치도 바뀐다.
위의 셋을 혼합해서 사용할 수 있다.
캔버스 스케일러
플레이 환경의 해상도가 바뀌면 캔버스의 크기도 바뀐다. 하지만 그 안의 UI들의 크기는 바뀌지 않을 수 있다. 그걸 원하지 않는다면 설정을 변경해주어야 한다.
앵커
해상도가 변경될 때 오브젝트를 어디 기준으로 고정할 것인가에 대한 기준이라고 보면 된다. 오브젝트의 모서리에서 앵커까지의 거리를 고정시킨다. 캔버스의 크기가 변경될 경우 거리가 고정이기 때문에 UI 크기가 변경될 수 있다. 앵커 네 모서리를 수동으로 찢어서 쓸 수도 있다.
버튼으로 UI 쉽게 띄우기
개인 과제를 진행할 때에는 스크립트에서 UI를 끄고 켰다. 그런데 그렇게 하면 또 UI 정보를 받아와야 하는데, 부모-자식 관계가 아니면 또 번거롭게 되기 때문에, 이렇게 구현하는 방법도 괜찮은 거 같다.
[결과물]
https://github.com/JNUSYJ/SpartaTown
[회고]
강의 중에 코드 기능 분리에 대해 언급된 게 있었다. 뭔가 내가 하는 코딩과 비슷해보였는데, 잘못된 방법이라고 해서 더 체감이 됐다... 좀 길어지더라도 줄 단위로도 잘 쪼개야 할 거 같다.
그리고 개인과제를 진행하면서 캐릭터를 전환하는 방법으로 오브젝트 활성화/비활성화 하는 방법을 선택했는데, 다른 여러 기능이 추가되면 이게 어려워질 거 같았다. 그래서 과제 해설 강의에선 어떻게 할까 궁금했는데, 그냥 비슷하게 구현한 거 같았다. 더 깊게 생각해봐야 되는 부분인 거 같다.
이렇게 이번 주차 개인과제가 끝났다. 내일 석가탄신일을 쉬고 모레부터 팀 프로젝트가 시작할 거 같다. 월요일부터 시작해야 새로운 기분이 들 거 같은데 조금 아쉽다.
'TIL > Unity' 카테고리의 다른 글
내일배움캠프 23일차 TIL - 유니티 입문 팀 프로젝트 2 (0) 2024.05.17 내일배움캠프 22일차 TIL - 유니티 입문 팀 프로젝트 (1) 2024.05.16 내일배움캠프 20일차 TIL - 스파르타타운 게임 제작 (0) 2024.05.13 내일배움캠프 19일차 TIL - 2D게임 기초 개발 입문 2 (0) 2024.05.10 내일배움캠프 18일차 TIL - 2D게임 기초 개발 입문 1 (0) 2024.05.09