Prosto
따라하는 유니티 2D 프로젝트ⓑ -1 본문
따라하는 유니티 2D 프로젝트ⓑ 강좌 첫 번째 시간입니다.
이번에 함께 할 작업은 가장 기본적인 틀을 만들어 보는 것입니다.
볼을 게임 화면에 놓고, 그 볼이 일정하게 움직이도록 하겠습니다.
그 후에 블록을 게임 화면에 놓고 충돌처리가 되는 지 확인해보겠습니다.
그럼 시작하겠습니다.
가장 먼저 저번에 작업했던 프로젝트를 실행합니다. 그리고 순서대로 직접 해보며 따라오시면 됩니다.
유니티에서 우리가 만들었던 프로젝트를 실행하면 이런 화면을 볼 수 있을 겁니다.
그럼 먼저 폴더를 추가해볼까요?
Project 탭에서
Assets 파일 위에서 마우스 우클릭하면 메뉴가 나옵니다.
그 메뉴 중 Create - Folder 순으로 선택해줍니다.
이렇게 만들어준 후 이름을 지정해주면 됩니다.
Scripts라는 폴더를 만들어보죠.
방금 전처럼 우클릭 - Create - Folder를 선택하여
Images, Resources, Scenes 폴더들을 생성해주세요.
이제 이미지를 추가해볼까요?
아래 이미지를 받아 사용하셔도 됩니다.
이렇게 파일을 드래그 앤 드랍하면 유니티 프로젝트에 추가할 수 있습니다.
그리고 이미지 설정을 해줘야하는데요.
Texture Type은 Sprite(2D and UI)로 변경해주시고,
Generate Mip Maps의 체크는 해제해주신 후
Apply 버튼을 누르면 됩니다.
그렇게 설정이 끝난 이미지를
Hierarchy 탭으로 드래그 앤 드랍하시면
이미지가 있는 게임오브젝트로 생성됩니다.
드래그 앤 드랍이 끝나면 이렇게 ball_prosto가
Hierarchy 탭에 추가됐죠?
추가하면 이렇게 Scene, Game 탭에서도 확인할 수 있습니다.
(Game 탭에서는 Camera가 찍고있는 모습을 보여줍니다.
카메라가 이동하면 Game 화면에서의 이미지도 움직여지겠죠?)
Scene - 관리하는 화면 실제 씬에 있는 오브젝트 전체를 파악할 수 있습니다.
Game - 실제 게임이 실행되었을 때의 화면입니다.
근데 게임 화면에서 보이는 볼의 크기가 너무 크죠?
줄여야겠습니다.
줄이는 방법은 해당 오브젝트의 Scale을 줄이는 게 가장 일반적이지만,
우리는 처음 공을 중심으로 어느정도 셋팅을 해두도록 합시다.
카메라 사이즈를 변경하기 위해서
Main Camera를 선택한 후
우측의 Inspector 탭에서 Size를 15로 변경해줍니다.
(사이즈로 찍는 거리가 바뀐다고 생각하시면 됩니다.)
카메라 사이즈를 저정도로 바꿔줬는데도 큰 것 같으니,
그림 자체 크기를 조금 줄여볼까요?
Images 폴더에 있는 ball_prosto 이미지를 눌러줍니다.
그리고 우측 Inspector 탭에서
Pixels Per Unit을 100에서 200으로 바꿔줍니다.
그러면 적당한 크기가 된 것 같네요.
이제 지금까지 한 작업을 저장해볼까요?
(가끔 유니티가 팅기는 경우가 있으니 저장은 자주해주세요.
이번에만 이렇게하고 다음부터는 'Ctrl + s' 단축키로 현재 씬을 저장해주시면 됩니다.)
좌측 상단의 메뉴 중
File을 누른 후 Save Scene을 선택합니다.
이런 팝업창이 나올 것입니다.
현재 프로젝트 파일의 경로에 맞게 나오겠죠?
여기서 아까 만들어 둔 Scenes 폴더를 더블클릭해줍니다.
경로가 Scenes로 바뀌었죠?
파일 이름을 입력한 후 저장(S)버튼을 눌러줍니다.
그렇게 저장이 완료된 후 Project 탭에서
Scenes에 들어가보면 씬이 잘 저장되어 있는 것을 확인할 수 있습니다.
또 폴더를 만들기 위해
우측 클릭을 한 후 Create - Folder 순으로 선택해줍니다.
Scripts 하위에 Ball이라는 폴더를 생성했습니다.
이번에는 C# Script를 만들어보겠습니다.
폴더를 생성했던 것과 마찬가지입니다.
우측클릭 후 Create - C# Script 순으로 선택해주세요.
이름은 MoveBall으로 했습니다.
(이름 작성 중 esc키를 누르면 생성을 취소할 수 있습니다.)
그럼 이제 더블클릭하여 실행시켜주세요.
이렇게 visual studio 2015로 스크립트가 실행된 것을 확인할 수 있을 겁니다.
여기서 우리는 Start, Update모두 지우고 작성하도록 합시다.
(드래그 후 Delete 혹은 backspace로 제거)
이렇게 말이죠.
이제 스크립트 작성을 해볼까요?
위쪽에 사용될 변수들을 쭉 선언해주세요.
(public과 private의 차이점은 알고계신가요?
대략적인 의미는
public은 다른 곳에서 참조할 수 있게, 공개적인 변수 형태로 만드는 것이고,
private은 다른 곳에서 참조할 수 없게, 개인적인 변수 형태로 만드는 거죠.)
그리고 void Awake(){ 내용 }
이 함수는 이 스크립트가 등록되어
처음으로 시작될 때
가장 먼저 실행되는 부분입니다.
다음으로 void FixedUpdate() { 내용 }을 작성합니다.
이 FixedUpdate()함수는 스크립트가 등록되어 있다면
1초에 고정된 횟수만큼 호출되는 함수입니다.
(기본적으로는 0.02초에 한번 호출되어 1초에 50번 호출됩니다.)
(이는 상단 메뉴의 Edit - Project Settings - Time으로 들어가
Fixed Timestep을 변경하여 간격을 바꿀 수 있습니다.)
Update와 FixedUpdate의 차이는
Update - 매 프레임 (만약 프레임에 변동이 생긴다면 호출 횟수에 차이가 생깁니다.)
FixedUpdate - 고정된 횟수 시간 (만약 프레임에 변동이 생겨도 호출 횟수에 차이가 없습니다.)
이제 만든 스크립트를 사용하기 위해 등록해줄까요?
Hierarchy에서 공 객체인 ball_prosto를 선택해줍니다.
그 후 Scripts-Ball에 있는 MoveBall 스크립트를
Inspector의 Add Component 부분에 드래그 앤 드랍하여 추가해줍니다.
(등록되면 저렇게 Move Ball(Script)라는 게 생깁니다.)
그러면 이번에는 MinPos, MaxPos를 설정해줄까요?
우측 상단을 기준으로 잡아서 ball이 이동할 수 있는 MaxPos를 찾아줍니다.
이렇게 볼의 Inspector를 확인해보니
Position X 20.5, Y 14.7이네요.
이를 토대로 MaxPos를 바꿔주도록 합시다.
그대로 MoveBall(Script)의 Max Pos를 20.5, 14.7로 입력해줍니다.
(이렇게 public으로 등록해주면 바깥에서 값을 지정해줄 수도 있습니다. [다른 스크립트에서 참조도 되고요.])
이번에는 좌측하단을 기준으로 Min Pos를 맞춰봅니다.
Position을 보면 -20.5와 -12.7이죠?
또 이를 토대로 Max Pos처럼 Min Pos를 변경해줍니다.
그리고 실행버튼을 눌러보면 볼이 일정한 속도로 튕겨다니는 것을 확인할 수 있습니다.
여기까지가 가장 기본적인 볼의 이동이었습니다.
스크립트를 통하여 일정하게 이동하며 최고점(혹은 최저점)에 닿으면 방향을 전환하게 만들었습니다.
이번 시간에는 간단한 충돌 체크 정도까지는 해보도록 합시다.
그러면 블록을 만들기 위해 이번에도 간단한 이미지가 필요하겠죠?
이렇게 아까한 것처럼
Images 폴더에 드래그 앤 드랍하면 간단하게 이미지가 추가됩니다.
설정은 아까와 마찬가지로
Sprite (2D and UI)로 변경, Generate Mip Maps 체크 해제 후
Apply를 눌러주시면 됩니다.
그리고 아까 ball 객체를 만들었듯이
Images 폴더에 있는 Block_prosto를 Hierarchy 탭으로
드래그 앤 드랍하면 객체를 생성할 수 있습니다.
그리고 이번에는 충돌 처리를 하기 위한 Component를 추가해보겠습니다.
Block_prosto가 선택된 상태에서
Inspector 탭의 하단에 위치하고 있는 Add Component를 누릅니다.
그리고 검색창에 "col"이라고 검색합니다.
많은 종류의 Collider(충돌검사하는 컴포넌트)들이 있는데
우리는 여기서 Box Collider 2D를 선택해줍니다.
그리고 정상적으로 추가되었다면 이렇게 나올겁니다.
여기서 추가적으로 Is Trigger에 체크를 해줍니다.
(충돌 처리를 할 꺼고, 트리거로 사용하겠다는 의미죠.)
스크립트를 추가해줍니다.
먼저 Scripts 하위에 Block이라는 폴더를 만들어준 후
C# 스크립트를 하나 만들어줍니다.
이름은 블록에 대한 정보를 가지고 있을 테니 BlockInfo로 만들었습니다.
마찬가지로 기존에 있던 내용은 제거해주시고요.
이렇게 추가해줍니다.
void OnTriggerEnter2D(Collider2D col){내용}
충돌확인을 하는 함수입니다.
충돌 확인하고 충돌이 된다면 저 함수가 있다면
호출되어 그 내용이 실행되는 거죠.
작성된 내용을 보면
충돌체와 닿으면(더 자세하게는 안으로 들어오면)
"충돌"이라고 콘솔창에 알려주는 것입니다.
이렇게 작성 완료한 스크립트를 게임오브젝트에 붙여주도록 합시다.
아까와 같습니다.
이번에는 Hierarchy 탭에서 Block_prosto를 선택한 후 진행되겠네요.
Scripts - Block에 있는 BlockInfo를 드래그 앤 드랍하여 추가해줍니다.
그러면 블록은 충돌에 대한 준비가 다 됐네요.
하지만 볼은 아직 아무것도 안 해줬죠?
볼도 처리해줍시다.
Hierarchy 탭에서 ball_prosto를 선택한 후
Inspector 탭에서 Add Component를 누릅니다.
그리고 col이라고 검색한 후 이번에는 Circle Collider 2D로 추가해줍니다.
Scene에서 보면 주변이 살짝 남으니
반지름(Radius)은 1.2로 바꿔주도록 합니다.
(여기서는 IsTrigger 체크할 필요 없습니다.)
그리고 하나 더 추가해야 하는 게 있습니다.
마찬가지로 Add Component를 누르고
rig 검색 -> Rigidbody 2D를 선택하여 추가해줍니다.
충돌 당하는 쪽에는 붙어있어야합니다.
추가한 컴포넌트(Rigidbody 2D)에서 Is Kinematic은 체크해줍니다.
체크가 안 되어있으면 물리 처리를 그대로 받아서
의도한 처리와 달리 중력을 받고 떨어지는 것을 볼 수 있습니다.
(실제로 보고싶다면 Is Kinematic 해제하고, 우리 MoveBall 스크립트 해제한 후 실행해보시면 됩니다.)
테스트해보기 전에!
빠른 확인을 위하여
적당한 위치에 블록을 위치시킵니다.
저는 이정도였네요.
그리고 실행시켜보면 블록과 닿으니 충돌을 알려주는 것을 확인할 수 있습니다.
하지만 아직 블록을 뚫고 지나가버리죠?
그에 대한 처리는 다음 시간에 하게될 겁니다.
지금까지 따라하는 유니티 2D 프로젝트ⓑ -1번 강좌를 보셨습니다.
이번 시간에 이미지를 넣어보고, 스크립트도 생성해봤습니다.
그리고 그 스크립트로 볼을 움직이고, 충돌 처리도 해봤습니다.
블록 깨기 게임에서 필요한 가장 기본적인 요소를 가지고 시작해봤습니다.
다음 시간에는 실제 충돌이 되면 볼이 튕겨나가는 부분과
블록이 충돌 시 제거되도록 하겠습니다.
고생하셨습니다. 같이 따라오며 하니 어떤가요? 도움은 좀 됐나요? 그럼 프로젝트의 다음 단계를 진행하며 나오는 새로운 것들에 대해서는 지금과 같이 설명하며 진행하도록 하겠습니다.
궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 )
'Programing > Unity 3D' 카테고리의 다른 글
따라하는 유니티 2D 프로젝트ⓑ -3 (4) | 2016.10.09 |
---|---|
따라하는 유니티 2D 프로젝트ⓑ -2 (9) | 2016.10.06 |
따라하는 유니티 2D 프로젝트ⓑ -0 (6) | 2016.10.04 |
따라하는 유니티 2D 프로젝트ⓐ -12 (5) | 2016.09.27 |
따라하는 유니티 2D 프로젝트ⓐ -11 (3) | 2016.09.24 |