일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- unity 게임 개발
- 유니티 미연시
- 오픽 im1
- unity 게임
- 크래프톤
- 크래프톤 정글랩
- Unity Chess
- 게임 개발
- unity 설치
- Unity 독학
- ETRI 연구연수
- unity 개발
- 유니티 체스
- node.js
- 크래프톤 정글 게임랩
- unity 공부
- 게임 독학
- 크래프톤 게임 정글 랩
- 유니티 스토리
- unity 강의
- protobuf 란?
- 크래프톤 정글 게임 랩
- 게임 개발 독학
- 유니티 대화
- 유니티
- unity
- 유니티 퀘스트
- 유니티 독학
- 오픽 im1 5일
- protobuf란
- Today
- Total
하참이의 아이디어노트
Unity 강의 2일차 (1) - 차량, 비행기 조종 게임 프로그래밍 본문
다음 작성 내용은 아래 문서들을 참고하여 작성 한 내용입니다. 학습 도중 더욱 자세한 내용이 궁금하다면 문서를 참고해시거나, 댓글로 질문을 주시면 성심성의껏 답변 드리겠습니다.
1단원 - 플레이어 컨트롤 - Unity Learn
이 단원에서는 도로 위를 좌우로 움직이며 가는 길에 있는 장애물을 피하거나 부딪히는 차량을 프로그래밍합니다. Unity 에디터와 워크플로에 익숙해질 뿐만 아니라 새로운 C# 스크립트를 만들고
learn.unity.com
자! 이제 게임 다운 것을 한 번 만들어 봅시다. 코드로 작성하기 때문에 C# 프로그래밍에 대해 상당한 이해도가 필요할 것이라 생각합니다. 분명히 모르는 내용이 있을 수 있습니다. 이해가 가지 않는 내용은 댓글을 달아주시면 성심성의껏 답변 드리겠습니다!
저희는 이 프로젝트에서 3D 엔진을 다루는 법에 익숙해지고 캐릭터를 이동시키는 법, 물체를 부딛히는 법 등을 응용해 게임을 만들 예정입니다.
잘 따라와주시면 감사하겠습니다!
우선 새 3D 프로젝트를 생성합니다. Unity 버전(2018.4LTS, 2019.4LTS 또는 2020.3LTS)을 추천드립니다.
아래 링크를 클릭하여 파일을 다운로드 한 후 압축된 폴더의 압축을 해제합니다. (신뢰가 가지 않을 수 있습니다. 프로그래머라면 말이죠.. 맨 위 링크 Unity 공식 사이트에 있는 파일을 다운로드 받는 것도 좋은 방법입니다.)
Unity 상단 메뉴에서 Assets > Import Package > Custom Package를 선택한 후 압축을 해제한 폴더로 이동하여 Prototype-1_Starter-Files.unitypackage 파일을 선택합니다.
그 다음 프로젝트 창에서 Assets > Scenes > Prototype 1 씬을 더블클릭하여 엽니다.
레일이 깔렸네요! Windows 에서 Layout을 2 by 3으로 바꾼 뒤, 환경을 살펴봅시다.
SkyDome, MountainSkybox, Road가 있습니다. 간략히 설명 드리자면 SkyDome과 MountainSkybox는 배경을 나타내기 위한 게임 오브젝트이고, Road는 중간에 깔린 도로입니다. 한 번씩 클릭해서 어떤 것인지 확인해보시길 바라겠습니다.
기존에 존재하던 SampleScene을 저장하지 않고 삭제합니다.
차량 운용이라더니.. 차가 없네요!
걱정하지마세요! 이전에 설명했듯 패키지에는 이러한 모든 것들이 준비 되어있습니다.
프로젝트 창에서 Assets > Course Library > Vehicles를 연 후 마음에 드는 차량을 하이어라키 창으로 드래그 합니다.
남자의 마음을 울리는 탱크도 있지만 저는 버스가 마음에 드네요. 버스를 추가하겠습니다.
장애물도 배치해볼까요? 장애물은 Couse Library > Obstacles에 존재합니다. 이번에는 씬 뷰로 직접 드래그 해서 배치합시다.
이런.. 게임 뷰를 보니 카메라의 위치가 마음에 들지 않습니다. 카메라를 직접 이동 시켜서 '탑다운 뷰'로 제작을 해 봅시다.
팁! 기존에 배웠던 툴 바의 기능들을 사용해 적극적으로 게임 뷰에서 보기 좋은 카메라 위치를 찾아봅시다! 카메라의 위치는 유저가 게임을 오랫동안 즐길 수 있게 만드는 매우 중요한 작업입니다.
이제 스크립트를 만들어 볼까요? 기존에 했던 것처럼 Scripts 폴더를 생성하고 안에 PlayerController라는 이름의 스크립트를 생성합니다.
여기서 어떤 게임 오브젝트를 컨트롤 하는 스크립트를 게임 프로그래머들은 암묵적으로 Controller라는 이름을 붙여 제작합니다. 스크립트 이름을 제작하기 어려울 때 참고하시면 좋습니다.
이 스크립트 컴포넌트를 Vehicle 오브젝트에 부여합니다.
우선 직진 모션만 구현해볼까요. 스크립트의 Update 함수를 다음과 같이 작성합니다.
void Update()
{
// Move the vehicle forward
transform.Translate(0, 0, 1);
}
게임을 실행해보고 차가 앞으로 나아가는지 확인합니다.
문제가 바로 보이는 것 같습니다. 일단 사물에 부딛히지도 않고 속도도 너무 빠르고 멈추지도 않고 방향 조절도 안되네요.
이런식으로 해야 할 목록들을 기록해두는 것은 매우 중요한 일입니다.
우선 차량이 Z축으로 이동하게 설정해놓았지만 더 깔끔한 코딩 방식이 있으니 그에 맞게 수정하도록 합시다.
void Update()
{
// Move the vehicle forward
transform.Translate(Vector3.forward);
}
방향을 입력하는 방식에서 Vector3의 forward라는 프로퍼티를 사용하였습니다.
이렇게 하면 속도의 계산이 편해지고, 방향이 직관적으로 보이는 등 다양한 장점이 있습니다.
계산이 편해진다구요? 바로 한번 적용해봅시다. Update 함수를 다시 수정합니다.
void Update()
{
// Move the vehicle forward
transform.Translate(Vector3.forward * Time.deltaTime * 20);
}
Time.deltaTime은 시간을 일치시켜주기 위해 사용합니다. Update는 프레임단위로 움직인다고 하였습니다. 하지만 프레임의 변화는 유저의 컴퓨터 환경에 따라 1초에 60번 일어날 수도 있고 240번 일어날 수도 있습니다. 이렇게 되면 컴퓨터의 성능으로 인해 게임이 전혀 다른 결과가 일어나는 대참사가 일어날 것 입니다. 그렇기에 Time.deltaTime을 사용하는 것을 습관화 합시다.
그리고 상수 20을 곱해 속도를 조절합니다. 게임을 다시 실행해보면 속도가 완만해진 것을 확인할 수 있습니다.
이제 물체가 충돌되게 바꿔봅시다. 이에 대해서는 이전 시간에 배운 Rigidbody를 활용하면 되겠지요.
Vehicle을 선택한 후, Inspector창에서 Rigidbody를 추가해줍니다.
마찬가지로 장애물들에게도 Rigidbody를 추가해줍니다.
게임을 실행해보면 자동차가 시원하게 장애물을 밀고 지나가는 것을 확인할 수 있습니다.
이제야 엔진다운 작업을 해보는 것 같습니다! 하지만 아직 게임이라고 느껴지기엔 멀었지요.
쭉쭉 나아갑시다! 2일차도 화이팅입니다!
'Unity > Unity 기초' 카테고리의 다른 글
Unity 강의 2일차 (3) - 주행 준비 (0) | 2025.01.16 |
---|---|
Unity 강의 2일차 (2) - 빠르게 이동하는 물체 추적하기 (0) | 2025.01.16 |
Unity 강의 1일차 (13) - 배경 음악 추가 (0) | 2025.01.16 |
Unity 강의 1일차 (12) - 스크립트로 게임 오브젝트 변경 (0) | 2025.01.16 |
Unity 강의 1일차 (10) - 에셋 다운로드 (0) | 2025.01.16 |