[5].1 프로젝트 생성과 환경설정 [5].2 플레이어 이동제작 [5].3 총알 이동 제작 |
[5].1 프로젝트 생성과 환경설정
⚙️이번에 진행할 내용은 2020 버전(이상) 유니티가 필요합니다.

✔️Android Build Support 체크 후 다운로드 진행
🔶 슈팅 게임 프로젝트 생성하기
- Unity Hub 실행
- 템플릿은 3D로 지정
- 프로젝트 이름을 ShootingGame으로 지정
- 생성 버튼을 클릭하여 프로젝트 생성
- ShootingGame 으로 프로젝트가 만들어지면 유니티가 실행된다.
🔶 제작 환경 설정하기 - 씬 설정
- Scene 뷰를 lso 모드로 변경하고 기즈모를 클릭하여 화면이 Back 뷰가 되도록 설정
🔶 제작 환경 설정하기 - 카메라 설정
- 씬에는 반드시 하나 이상의 Main Camera 가 존재
- 카메라에는 카메라 콤포넌트가 붙어 카메라의 역할을 한다
- Main Camera 의 Position 을 그림과 같이 세팅
- Projection 을 Orthographics 으로 설정
🔶 제작 환경 설정하기 - 조명 설정
- 하이어라키 창에서 Direction Light 를 선택
- Light 컴포넌트를 비활성화 해준다.
- [window - Rendering - Lighting] 창을 열어준다.
- Lighting 창이 열리면 Scene 탭의 맨 하단의 Auto Generate 옵션을 비활성화 해준다.
- Environment 항목에서 Environment Lighting 의 Source 를 Color 로 변경
- 이때 나타나는 Ambient ColorRGB 값을 모두 255로 수정하여 흰색으로 지정
🔶 제작 환경 설정하기 - 해상도 설정
- Game 창에서 해상도 변결을 위해 툴바의 해상도 관련 드롭다운 메뉴를 열어 [+} 버튼을 눌러준다.
- 해상도를 640 x 960 으로 가로, 세로 값을 지정한다.
[5].2 플레이어 이동 제작
🔶 플레이어 게임 오브젝트
- 하이어라키창에서 [+] 버튼을 눌러 [3D Object - Cube]를 생성하고 이름을 Player로 변경한다.
- Transform 값은 그림처럼 지정한다.
🔶 Scripts 폴더 추가
- 프로젝트(Project) 창에서 + 버튼을 눌러 Folder 를 선택하고 이름을 Scripts 로 변경
🔶 PlayerMove 스크립트 생성
- [+] 버튼을 눌러 Scripts 폴더 내 C# Script 를 만들어주고 이름은 PlayerMove 로 지정
- PlayerMove 라는 파일 이름과 아래 그림처럼 클래스 이름이 완전히 같아야 한다.
🔶 PlayerMove 스크립트 할당
- PlayerMove 스크립트를 드래그하여 하이어라키의 Player 객체에 드롭
🔶 플레이어 이동 시키기 1
- PlayerMove.cs 에 아래 코드를 작성하고 저장
- Unity로 돌아가 실행 결과를 확인한다.
- 스크립트를 수정하여, 왼쪽, 위, 아래로도 이동할 수 있도록 스크립트를 수정하여 본다.
- 코드의 Vector3.right 를 Vector3.up, Vector3.down 으로 교차하면 된다.
🖥️ PlayerMove.cs 플레이어 이동 코드
public class PlayerMove : MonoBehaviour
{
void Update()
{
transform.Translate(Vector3.right * 5 * Time.deltaTime);
}
}
🔶 플레이어 이동 시키기 1 - Vector
- Vector 는 크기와 방향을 갖고 있다.
- 사칙연산 중 더하기, 빼기, 곱하기(내적, 외적) 이 가능하다.
- 크기는 그림에서 파란색, 방향은 빨간색 화살표로 표시
🔶 플레이어 이동 시키기 1 - Vector 더하기
- Vector 는 모든 힘의 합을 표현
- 오른쪽 화살표 키와 위쪽 화살표 키를 누르면 대각선으로 가는 방향을 만들어 낼 수 있다.
- 골프게임, 당구, 앵그리버드, 포트리스 같은 게임을 제작하는데 사용할 수 있다.
🔶 플레이어 이동 시키기 1 - Vector 빼기
- 원하는 지점으로 가는 방향을 찾아낼 때 유용하게 사용
- Direction = B - A 의 의미는 A가 B로 가고자 하는 방향을 찾는 수식
- 전역변수를 활용하여 Speed 속성을 외부에 노출
- 이렇게 노출된 속성은 유니티 에디터에서 수정이 가능
🖥️ PlayerMove.cs에 speed 속성 추가
public class PlayerMove : MonoBehaviour
{
// 플레이어가 이동할 속력
public float speed = 5;
void Update()
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
🔶 플레이어 이동 시키기 1 - 라이프사이클 함수 (Life Cycle Fucntion)
- 유니티 객체의 생애주기
- 표에서처럼 태어남은 Start, 살다가는 Update, 죽다는 OnDestory 함수로 매칭된다.
- 유니티에서의 이벤트 함수에는 접두어로 On을 붙여준다.
태어남 | 살다가 | 죽다 | |
발생 횟수 | 1 | 계속 | 1 |
발생 일시 확인 여부 | 0 | 0 | X |
유니티 함수 | Start | Update | OnDestroy |
🔶 플레이어 이동 시키기 1 - deltaTime
- delta 는 변화된 것을 뜻한다.
- 그림에서 중간의 구간들은 PC에서 초당 처리할 수 있는 횟수
- 첫 번째 그림은 초당 4번을 실행할 수 있고, 두 번째 그림은 초당 2번을 실행할 수 있기에 초당 움직일 수 있는 거리가 달라진다.(한번에 1m씩 움직인다면 위는 4m, 아래는 2m 이동)
- 동기화 처리를 위해 구간에 걸린 시간(위 0.25, 아래 0.5)를 각각의 이동 거리에 곱해주면 최종 1m씩으로 움직인 거리가 같아진다.
- 회전, 크기 변환 작업에도 deltaTime을 곱해주어 동기화시켜야 한다.
🔶 사용자 입력 처리
- 키보드의 좌우키, A, D 키의 입력을 대응하기 위한 코드를 작성
- Unity의 [Edit - Project Setting - Input Manager] 의 속성에 등록되어 있는 Horizontal 을 활용
🖥️ PlayerMove.cs 사용자 입력 처리 가로방향
public class PlayerMove : MonoBehaviour
{
// 플레이어가 이동할 속력
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
print(h);
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
- 상하 입력에 대응하는 코드 작성
🖥️ PlayerMove.cs 사용자 입력 처리 세로방향
public class PlayerMove : MonoBehaviour
{
// 플레이어가 이동할 속력
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
print("h : " + h + ", v : " + v);
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
🔶 방향 만들기
- "사용자 입력에 따라 방향 만들어서 이동한다." 이 내용을 우리는 구현
- "방향 만들기" 가 있어야 이동이 가능
- 사용자 입력에서 받은 값을 방향을 만드는 데에 사용
- 만들어진 방향을 최종 이동 로직에 적용
🖥️ PlayerMove.cs 방향을 담을 변수 만들기
public class PlayerMove : MonoBehaviour
{
// 플레이어가 이동할 속력
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = Vector3.right * h + Vector3.up * v;
transform.Translate(dir * speed * Time.deltaTime);
}
}
- Vector3.right * h 를 x, y, z 에 대한 각 성분의 값으로 표현해 보면 (1, 0, 0) * h = (h, 0, 0) 이 된다.
- Vector3.up * v 는 (0, 1, 0) * v = (0, v, 0) 된다.
- 둘을 합하면 (h, 0, 0) + (0, v, 0) = (h, v, 0) 이 되므로.
- 스크립트를 코드처럼 각 성분으로 변경할 수 있다.
🖥️ PlayerMove.cs 방향을 각성분으로 제작
public class PlayerMove : MonoBehaviour
{
// 플레이어가 이동할 속력
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = new Vector3(h, v, 0);
transform.Translate(dir * speed * Time.deltaTime);
}
}
🔶 플레이어 이동 시키기 2
- 물체를 이동하기 위한 물리 법칙으로 이동, 속도, 힘 에 관한 공식을 사용한다.
- P 는 앞으로의 위치, P0 는 현재, v 는 속도, t 는 시간을 의미
- F 는 힘, m 은 질량, a 는 가속도를 의미
P = P0 + vt v = v0 + at F = ma |
- Translate 함수를 P = P0 + vt 공식으로 변환하여 작성
🖥️ PlayerMove.cs 이동공식으로 코드 변환
public class PlayerMove : MonoBehaviour
{
// 플레이어가 이동할 속력
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = new Vector3(h, v, 0);
// P = P0 + vt 공식으로 변경
transform.position += dir * speed * Time.deltaTime;
}
}
[5].1 프로젝트 생성과 환경설정
🔶 Bullet 생성
- 하이어라키 툴바의 + 버튼을 선택하여 Cube 를 하나 만들어 주고 이름을 Bullet 으로 변경
🔶 Bullet 위치 설정
- Bullet 의 Transform 정보를 변경해 주도록 한다.
- 총알이 잘 보이도록 위치를 변경하고 총알의 크기도 변경해 주도록 한다.
🔶 Bullet 스크립트 생성
- Project 창의 툴바 버튼인 + 를 눌러 Scripts 폴더에 C# 스크립트를 하나 만들어 주고 이름은 Bullet 으로 변경
🔶 Bullet 스크립트 할당
- Bullet 스크립트를 잡아서 드래그 앤 드롭하여 Bullet 게임 오브젝트의 컴포넌트로 붙여준다.
🔶 목표에 따른 구성 순서
목표 | 위로 계속 이동하고 싶다. |
필요 속성 | 이동 속도 |
순서 | ① 방향 구하기 ② 이동하기 |
🔶 이동속도 속성 추가
- 유니티 에디터 상에 노출하여 기획자가 수정할 수 있도록 접근 제한자를 public 로 하여 speed 변수를 하나 만든다.
🖥️ Bullet.cs 이동속도 속성 추가
public class Bullet : MonoBehaviour
{
//필요속성 : 이동속도
public float speed = 5;
}
- 라이프사이클 함수 중 살아가는 중 계속 호출되는 함수는 Update 이기 때문에 이 곳에 구현 부를 추가
- 먼저 위로 가는 up 방향을 구하고 이동 공식 P = P0 + vt를 이용하여 해당 방향으로 이동
🖥️ Bullet.cs 위로 계속 이동하기 기능 구현
public class Bullet : MonoBehaviour
{
//필요속성 : 이동속도
public float speed = 5;
// Update is called once per frame
void Update()
{
// 1. 방향을 구한다.
Vector3 dir = Vector3.up;
// 2. 이동하고 싶다. 공식 P = P0 + vt
transform.position += dir * speed * Time.deltaTime;
}
}
이번 시간에는 플레이어, 총알 이동 제작을 해보았는데요!
본격적으로 게임을 구성하는 요소를 만들기 시작하는 것이 보여서 신기하고 설레네요 😙
물리 공식을 코드에 적용하는 것이 인상깊었습니다
추가되는 내용이 많아지는 만큼 앞으로 더 열심히 복습하고 따라가겠습니다!
글 읽어주셔서 감사합니다 🙇♀️
'Projects > Unity 게임 제작' 카테고리의 다른 글
[7] 슈팅 게임 제작 (3) (0) | 2023.07.06 |
---|---|
[6] 슈팅 게임 제작 (2) (2) | 2023.07.06 |
[4] C# 스크립트 (3) (6) | 2023.06.30 |
[3] C# 스크립트 (2) (6) | 2023.06.29 |
[2] C# 스크립트 (1) (6) | 2023.06.28 |