게임 설계 단계
1. 화면에 놓일 오브젝트를 모두 나열한다.
2. 오브젝트를 움직일 수 있는 컨트롤러 스크립트를 정한다.
1단계에서 나열한 오브젝트 중에서 움직이는 오브젝트를 찾는다.
움직이는 오브젝트에는 오브젝트의 움직임을 제어하는 대본이 필요하다.
오브젝트를 움직이는 대본을 이 책에서는 컨트롤러 스크립트로 칭한다.
3. 오브젝트를 자동으로 생성할 수 있는 제너레이터 스크립트를 정한다.
게임을 플레이할 때 생성될 오브젝트를 찾는다.
플레이어가 이동하거나 시간이 경과하면 출현하는 오브젝트이다.
게임을 플레이할 때 나타나는 오브젝트를 생성하는 스크립트를 이 책에서는 제너레이트 스크립트로 칭한다.
제너레이트 스크립트는 오브젝트를 생성하는 공장과 같다.
4. UI를 갱신할 수 있도록 감독 스크립트를 준비한다.
게임의 UI(사용자 인터페이스)를 조작하거나 진행 상황을 판단하려면 게임 전체를 관장할 수 있는 스크립트가 필요하다. 이 책에서는 감독 스크립트로 칭한다.
5. 스크립트를 만드는 흐름을 생각한다.
<운세 룰렛>
이번 게임은 매우 단순해서 3, 4단계는 필요하지 않다고 한다!
스마트폰(안드로이드)에서 동작하도록 빌드 설정을 바꿔준다.
File -> Build Settings에서 선택 가능하다.
내 폰은 아이폰인데 iOS로 하려면 MacOS가 필요하다고 한다. 노트북이 윈도우라 안드로이드로 한다 흑.........
게임 화면 크기는 Scene뷰의 Game 탭을 클릭 -> Free Aspect 클릭 -> 원하는 화면 크기 선택
Scene에 오브젝트를 배치할 것이다.
유니티 2D 게임용 프로젝트에서는 Scene뷰에 배치안 이미지를 스프라이트라고 한다.
오브젝트의 위치를 조절할 때 좌표를 특정 위치에 맞추고 싶다면 Inspector창을 쓰는 것이 편리하다고 한다.
X좌표와 Y좌표를 0으로 설정하면 스프라이트를 씬 중앙에 배치할 수 있다.
룰렛은 0,0,0에, 바늘은 0,3.2,0에 배치한다.
배경색 변경 -> 카메라 오브젝트의 매개변수를 바꾼다.
Main Camera -> Inspector창에서 Background 색상을 FBFBF2로 설정
- 룰렛 스크립트
클릭하면 룰렛을 회전시키되 시간이 흐르면 룰렛의 회전 속도를 점점 줄여 멈추도록 하는 구조.
1. 먼저 클릭하면 일정한 속도로 회전한다는 부분을 구성한다.
GetMouseButtonDown -> 마우스 클릭된 순간 true반환
GetMouseButtonUp -> 마우스 버튼을 클릭한 후 손을 뗀 순간 한번 true반환
GetMouseButtonDown -> 마우스 버튼을 손가락으로 누르고 있는 동안 계속 true반환
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RouletteController : MonoBehaviour
{
float rotSpeed = 0; // 회전 속도
void Start()
{
}
void Update()
{
//클릭 -> 회전속도 설정
//Input.GetMouseButtonDown(0)의 인수 : 0-> 마우스 왼쪽버튼, 1-> 마우스 오른쪽버튼, 2-> 마우스 휠
if (Input.GetMouseButtonDown(0)) {
this.rotSpeed = 10;
}
//회전 속도만큼 룰렛 회전
/*Rotate 함수를 사용하면 오브젝트를 회전시킬 수 있다.
* 게임 오브젝트를 현재 각도에서 인수 값만큼 회전시키는 기능
* 인수(x축 중심 회전값, y축 중심 회전값, z축 중심 회전값)
* 인수 전달 값 : 양수 -> 시계반대방향/ 음수 -> 시계방향
*/
transform.Rotate(0, 0, this.rotSpeed); // 프레임마다 10도씩 회전
}
}
작성한 룰렛 컨트롤러를 룰렛 스프라이트에 적용시킨다.
2. 회전 속도 줄이기
룰렛의 회전 속도를 줄이기 위해 회전 속도 멤버 변수인 rotSpeed의 값을 줄여준다.
rotSpeed의 값을 일정한 속도(선형)로 감속시키면 움직임이 자연스럽지 않다.
따라서 각 프레임의 rotSpeed 값에 감쇠 계수(예 : 0.96)을 곱해준다.
감쇠 계수는 값을 변경하는 것만으로도 감속 크기를 쉽게 바꿀 수 있어 공기저항에 따른 감속, 스프링 진동 감쇠 등 다야양한 장면에서 사용된다고 한다.
위의 코드에서 Update함수에 아래 코드를 추가해준다.
rotSpeed에 0.96이 곱해지면서 0에 가까워진다.
0이 되지는 않지만 매우 작은 수라 룰렛이 정지한 것처럼 보인다.
//룰렛 감속
this.rotSpeed *= 0.96f;
- 안드로이드 스마트폰에 빌드하기
코드에서 GetMouseButtonDown 함수가 핸드폰에서 탭 검출을 하기 때문에 작성한 코드 그대로 사용 가능하다.
apk 파일에는 단말기에서 유일한 이름을 사용해야한다.
File -> Build Settings -> Player Settings -> Other Settings -> Package Name에
com.원하는이름(영문).roulette 형식으로 입력한다.
Build Settings창으로 돌아가서 Scenes In Build에서 Scenes/SampleScene 체크를 해제하고 Project 창의 GameScene을 드래그&드롭해준다. 그리고 Build And Run을 클릭한다.
저장 하려고 - 했는데 ㅎ 안된다..
OpenJDK를 이전에 앱프 수업시간에 깔았었는데 따로 경로 연결하는 법이 까다로운 것 같아서
일단 Unity 허브에서 모듈을 추가로 설치해주었다.
설치해준 후 안드로이드 스마트폰을 개발자 옵션으로 설정하였다.
설정 -> 디바이스 정보 -> 소프트웨어 정보 -> 빌드 번호에서 7번 탭을 누른다.
디바이스 정보의 개발자 옵션에서 ON 해준 후 USB 디버깅을 ON으로 변경한다.
출처 : <유니티 교과서 개정 3판> 책
이제 잘 되는 듯 싶더니..... 또 안된다 ~~~
내가 생각하는 문제점
1. 안드로이드 스튜디오 할때 내 사용자 이름이 한글이어서 설치 자체가 안됐어서
새로운 윈도우 영어이름 계정에 설치해놔서 안스 안깔린걸로 인식..?
2. 이것도 한글이 폴더 명에 끼어있는게 문제가 되는 것 같다.
유니티도 영어계정에 새로 깔아야하나 싶다...................
왜 나는 한글 이름으로 계정을 만들었나...................
- 에러 목록
위의 오류를 해결했다 ! 역시 경로에 한글 이름이 섞여서 오류가 발생했다,,,
전에 안드로이드스튜디오도 한글 이름때문에 안깔려서 만들어둔 다른 윈도우 영어계정에서 위에서 만든 룰렛을
폰에 빌드한 결과 성공했다 ~!~! 룰렛만 빙빙 돌아가는데 감격한 나자신,,, ㅎㅎ
별 기능도 없지만 너무 귀엽다 키키,,, 그래도 안드로이드 폰에 빌드가 돼서 다행이다 !
'study > unity' 카테고리의 다른 글
[unity] #8. 화살 피하기 게임 - 1 (0) | 2020.08.20 |
---|---|
[unity] #7. 자동차 멈추기 게임 (0) | 2020.08.18 |
[unity] #5. C# 스크립트 기초 - 클래스, 벡터 (0) | 2020.08.09 |
[unity] #4. C# 스크립트 기초 - 배열, 함수 (0) | 2020.08.07 |
[unity] #3. 스크립트 개념 (0) | 2020.08.05 |