-
[Unity 2D] Fly Bird 플레이어 이동 구현하기Unity 2D 2023. 3. 21. 00:16
bird를 이동구현 하기 전에
빈 오브젝트를 생성해서 Player 폴더를 하나 만들어준다.
빈 오브젝트를 굳이 굳이 생성해서 Bird 를 관리하는 이유는
그 밑에 생성되는 많은 자식 오브젝트를 관리하기 쉽게 하기 위해서이고,
또 Collider 의 크기를 가지게 되면서 씬에서 생성되는 위치나 범위를 더 정확하게 체크할 수 있기 때문이다.
하이라키 창에서 마우스 우클릭 → Create Empty 로 빈 오브젝트 생성
이름을 Player로 바꾸고 Transform Reset 하기
Player 에 Bird 를 자식 오브젝트로 두기
이제 Bird 를 관리하는 Player 에 중력 컴포넌트를 넣어준다.
(Bird 가 위,아래로 왔다 갔다 하며 장애물을 통과하는 게임을 구현하기 위해)
Inspector 창 → Add Component → Rigidbody2D 클릭
그리고 이왕 컴포넌트를 만지는 김에 콜라이더도 같이 넣어준다.
나중에 어차피 필요하기 때문이다.
Inspector 창 → Add Component → Circle Collider 2D 클릭
콜라이더 속성 생성 후 Edit Collider 옆에 있는 아이콘 클릭
콜라이더의 크기를 내가 지정할 수 있다.
Bird 의 크기에 맞게 조정해준다.
나중에 장애물에 부딪힐 때 무언가를 구현하기 위함이다.
이제 이동 구현을 하기 위해 작성할 스크립트를 생성한다.
Asset 폴더에서 마우스 우클릭 → Create → C# Script 클릭
그리고 생성한 스크립트를 Player 폴더로 드래그해서 추가한다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { Rigidbody2D rb; [SerializeField] float Speed = 5; void Start() { // RigidBody2D 컴포넌트를 rb라는 변수를 통해 가져온다 rb = GetComponent<Rigidbody2D>(); } void Update() { // 스페이스바 혹은 마우스 좌버튼을 눌렀을 때 if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) { JumpBird(); } } void JumpBird() { // RigidBody2D의 Velocity는 Speed만큼 올라간다 rb.velocity = Vector3.up * Speed; } }
- [SerializedField] private 를 함께 선언해서 외부에선 접근할 수 없지만 인스펙터 창에서는 접근할 수 있도록 했다.
- GetComponent 를 사용하여 Rigidbody2D 속성을 rb라는 변수에 초기화했다.
- Input.GetKeyDown(KeyCode.Space) → 스페이스 바를 눌렀을 때
- Input.GetMouseButtonDown(0) → 마우스 버튼 왼쪽을 눌렀을 때
- Vector3.up → 2D 기준에서 오브젝트가 위로 향한다.
이 코드를 조금 더 보기 쉽게 풀어보겠다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { Rigidbody2D rb; [SerializeField] float Speed = 5; private bool keyJump = false; void Start() { // RigidBody2D 컴포넌트를 rb라는 변수를 통해 가져온다 rb = GetComponent<Rigidbody2D>(); } void Update() { // Jump를 입력받는 메서드를 따로 생성했다. InputBird(); } private void FixedUpdate() { // 입력받은 Jump값이 true라면 if(keyJump == true) { // JumpBird메서드 받기 JumpBird(); // 그리고 다시 keyJump값은 false로 만들어준다. keyJump = false; } } void JumpBird() { // RigidBody2D의 Velocity는 Speed만큼 올라간다 rb.velocity = Vector3.up * Speed; } void InputBird() { // 스페이스바 혹은 마우스 좌버튼을 눌렀을 때 if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) { // Jump값을 true로 입력받는다. keyJump = true; } } }
InputBird 메서드를 조금 더 단조롭게 해보자.
void InputBird() { // 스페이스바 혹은 마우스 좌버튼을 눌렀을 때 keyJump |= Input.GetKeyDown(KeyCode.Space); keyJump |= Input.GetMouseButtonDown(0); }
여기서 |= 의 의미를 알아보자.
a |= b
a = a | b
결국 GetKeyDown 혹은 GetMouseDown 둘 중 하나라도 만족한다면
그 값이 KeyJump 가 된다는 것을 의미한다.
전체 코드 보기
↓
더보기using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { Rigidbody2D rb; [SerializeField] float Speed = 5; private bool keyJump = false; void Start() { // RigidBody2D 컴포넌트를 rb라는 변수를 통해 가져온다 rb = GetComponent<Rigidbody2D>(); } void Update() { // Jump를 입력받는 메서드를 따로 생성했다. InputBird(); } private void FixedUpdate() { // 입력받은 Jump값이 true라면 if(keyJump == true) { // JumpBird메서드 받기 JumpBird(); // 그리고 다시 keyJump값은 false로 만들어준다. keyJump = false; } } void JumpBird() { // RigidBody2D의 Velocity는 Speed만큼 올라간다 rb.velocity = Vector3.up * Speed; } void InputBird() { // 스페이스바 혹은 마우스 좌버튼을 눌렀을 때 keyJump |= Input.GetKeyDown(KeyCode.Space); keyJump |= Input.GetMouseButtonDown(0); } }
'Unity 2D' 카테고리의 다른 글
[Unity 2D] Fly Bird 프리팹 구현하고 Collider 적용하기 (0) 2023.03.23 [Unity 2D] Fly Bird 그라운드 이동 구현하기 (0) 2023.03.21 [Unity 2D] Fly Bird 플레이어 따라 Camera 이동 구현 (0) 2023.03.21 [Unity 2D] Fly Bird 회전 구현하기 (1) 2023.03.21 [Unity 2D] Fly Bird 유니티 기본 세팅 (0) 2023.03.20