유니티(unity) 허브 실행 및, 간단한 플레이어 조작 스크립트 적용
게임 개발자를 생각하고 있다면, 우리는 유니티 엔진 혹은 얼리언엔진에 친숙해져야 한다.
왼쪽의 Hierarchy 창에서 우클릭
이들 중 이 블로그는 유니티 엔진에 대해서, 간단하게 시작하는 단계를 알려주고 기초적인 오브젝트의 움직임을 실습을 하겠다.
설치할 릴리스는 2022.3.22f1으로 선택하여 설치하면 된다.
아무튼, 새 프로젝트 버튼을 클릭하면 아래와 같은 창이 표시된다.
유니티 엔진은 안드로이드 스튜디오 처럼 기본적인 템플릿을 지원해주기에 원하는 것을 선택하여 프로젝트를 생성하면 된다.
본 블로그는, 2D환경으로 실습을 진행할 것이기에 2D 코어를 선택했다.
프로젝트 명을 원하는 이름으로 정한 뒤 프로젝트 생성을 누르면, 자동으로 프로젝트가 생성되고 다운로드 되는 것을 확인할 수 있다.
이제 아주 간단하게 오브젝트 생성 및 키보드 조작(좌우 이동 / 점프) 실습을 진행하겠다.
유니티 엔진은 기본적으로 중력을 설정할수 있다. 그렇기에, 해당 화면에서 플레이어만 생성하고 중력을 설정하면 어떻게 되겠는가?
플레이는 끊임없이 아래로 떨어지게 된다. 그렇기에 땅을 만들어줘야 한다.
2D Object -> Sprites -> Square 클릭 하면, 화면에 바로 사각형 모양의 2D오브젝트가 생성된다.
해당 오브젝트는 마우스로 크기를 늘리거나 줄일 수 있고, 오른쪽 창의 Inspector의 Transform으로 정밀하게 조정할 수 있다.
이번 실습은 간단한 실습이기에 마우스로 생성한 오브젝트를 아래로 옮기고, 크기를 변형하여 땅을 형성한다.
그 다음, 충돌 감지를 추가하기 위해 Inspector창에서
Add Component 버튼 클릭 -> Box Collider 2D 검색 후 추가한다.
Box Collider 2D가 추가된것을 확인되었다면, 땅은 이제 기초적인 공사는 끝났다.
이제 다음으로, 플레이어를 만드는데 아무 2D 오브젝트를 선택하여 생성하면 된다.
땅에서 추가했던 컴포넌트 처럼 필요한 컴포넌트를 검색하여 추가한다.
블로그에서 추가한 플레이어의 오브젝트는 2D이자 사각형 오브젝트이기에
Box Collider 2D 와
Rigidbody 2D를 검색하여 추가하면 된다.
여기까지 완료하고 실행을 하면, 플레이어 오브젝트가 중력의 영향을 받아 아래로 떨어지는 것을 확인할 수 있다.
그러나 당연하게도 키보드를 눌러봐도 플레이어는 움직이지 않는다. 그렇기에 우리는 스크립트를 작성하여 추가해야 한다.
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f; // 이동 속도
public float jumpForce = 10f; // 점프 힘
private Rigidbody2D rb; // Rigidbody 2D 컴포넌트를 담을 변수
private bool isGrounded = false; // 땅에 닿았는지 확인하는 변수
void Start()
{
// 시작할 때 Rigidbody 2D 컴포넌트를 가져와 rb 변수에 저장
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
// 1. 좌우 이동 처리
float moveInput = Input.GetAxis("Horizontal"); // 수평 입력 받기 (-1 ~ 1 사이 값)
rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
// 2. 점프 처리
// 스페이스바를 누르고 땅에 닿아있을 때
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
// 바닥 감지 (Collision 사용)
void OnCollisionEnter2D(Collision2D collision)
{
// "Ground" 태그를 가진 오브젝트와 충돌하면
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true; // 땅에 닿았다고 표시
}
}
void OnCollisionExit2D(Collision2D collision)
{
// "Ground" 태그를 가진 오브젝트에서 떨어지면
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = false; // 땅에서 떨어졌다고 표시
}
}
}
위의 소스코드를 작성하고 PlayerMovement.cs 파일명으로 저장하면 된다.
이와같이, 플레이 오브젝트의 컴포넌트들이 추가되어있으면 정상적인 준비가 완료되었다.
이제, 실행버튼을 클릭하면 플레이 오브젝트는 A / D 또는 <- / -> 방향키로 움직이는 것을 확인할 수 있고 스페이스바로 점프하는 것을 확인할 수 있다.
허나 스페이스바를 눌러도 점프는 안될 것이다.
왜냐하면 우리는 아직 땅에 태그를 부여하지 않았기 때문이다.
해당 창에서 태그를 클릭한 뒤, 나타난 창의 맨 아래. add tags를 선택하면 새로운 태그를 추가할 수 있다.
태그 부분에 + 버튼을 클릭한 뒤, 스크립트에서 설정한 태그의 이름 Ground 를 입력 후 save를 하면 된다.
후에, 땅 오브젝트의 태그를 방금 만든 Ground 태그로 변경하면 성공적으로 실행되는 것을 확인할 수 있다.
이제 실행을 하면 정상적으로 오브젝트가 움직이고 점프도 되는 것을 확인할 수 있다. 이와같은 방법을 사용하는 이유는, 제한을 걸어두지 않는다면 플레이 오프젝트가 무한점프로 하늘을 수영할 수 있기 때문이다.
댓글
댓글 쓰기