일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 게임제작
- 자바스크립트 게임
- 유니티3d
- Unity
- 1인 개발
- 게임 제작
- 합격
- Unity2D
- 토이 프로젝트
- 자바스크립트
- 퐁
- 1인 게임 제작
- 게임
- 유니티 3D
- 3회차
- 1인 게임 개발
- 정처기
- 정보처리기사
- 게임 개발
- Vampire Survivors
- 1인 게임
- FPS
- 필기
- Unity #Unity2D #Portal
- 프로그래머스 #최소힙 #우선순위 큐
- 정처기 필기
- portal
- unity3d
- Pong
- 유니티
- Today
- Total
Coding Feature.
[Unity 2D] Portal 같은 게임 만들기 #1 플레이어 움직임 구현. 본문
[Unity 2D] Portal 같은 게임 만들기 #1 플레이어 움직임 구현.
codingfeature 2024. 1. 5. 15:00제가 정말 좋아하는 게임 Portal을 Unity 2D Engine을 사용해서 만들어보기로 했습니다.
프로젝트 명은 "mini-portal"입니다.
우선 Unity 2D 프로젝트를 만들고, 사용될 Sprite 들을 불러왔습니다.
각각 Player 와 Ground로 이름을 지었습니다.
그 다음 Player와 Ground에 Box Collider 2D 속성을 집어넣어서 물체가 부딪히는 경우를 처리해주었습니다.
추가로 Player에는 RigidBody 2D 속성을 넣어서 물리적 특성을 부여하였습니다.
플레이 해보니 캐릭터가 게임에서 설정된 중력에 의해 내려와 플랫폼에 닿을 시 움직이지 않도록 되는 것을 확인할 수 있었습니다!
그 다음 플레이어의 움직임을 프로그래밍하기 위해 PlayerMovement.cs 파일을 생성하고 Player 오브젝트에 넣어주었습니다.
PlayerMovement.cs의 내용은 아래와 같습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
Rigidbody2D m_rb; // Player의 rigidbody.
bool m_isGrounded; // Player가 땅에 붙어있는지 확인하는 Boolean.
public float playerSpeed = 3.0f; // 움직임 속도.
public float playerJumpForce = 10.0f; // 점프 시 힘.
// Start is called before the first frame update
void Start()
{
m_rb = GetComponent<Rigidbody2D>();
m_isGrounded = true;
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.A)){ // 좌로 이동.
transform.Translate(Vector2.left * playerSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D)) // 우로 이동.
{
transform.Translate(Vector2.right * playerSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.Space) && m_isGrounded) // 스페이스 바를 누르고, 땅에 있을 때.
{
m_rb.AddForce(transform.up * playerJumpForce); // rigidbody에 힘 추가.
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ground")) // 땅에 붙어있을 경우,
{
m_isGrounded = true;
}
}
void OnCollisionExit2D(Collision2D collision) // 땅으로부터 떠있는 경우,
{
if (collision.gameObject.CompareTag("Ground"))
{
m_isGrounded = false;
}
}
}
좌, 우 이동 시 Player의 transform 내 값을 Translate 해줌으로써 좌우로 이동하도록 했습니다.
그리고 점프를 구현하기 위해 rigidbody 에 AddForce 함수를 이용해서 힘을 위로 가해 올라가도록 했습니다.
다만, 위 내용으로만 구현한다면 플레이어가 계속해서 스페이스바를 누를 경우, 계속해서 올라갈 것입니다!
따라서 땅에 붙어 있을 때만 점프를 할 수 있도록 해주어야 합니다.
즉, Collision 속성을 사용해서 땅에 붙어있는지 아닌지를 파악해주는 기능이 있어야 합니다! (m_isGrounded)
OnCollisionEnter2D 함수를 사용해서 Player의 Box collider에 닿은 collision에 대해서 그 물체의 Tag가 "Ground"인 경우, m_isGrounded를 true로 만들어서 파악할 수 있습니다!
위 코드를 작성하고 Ground Sprite의 태그를 "Ground"로 설정하니 잘 작동하는 것을 확인하였습니다.
그 다음은 Portal 게임에서 가장 중요한 포탈 매커니즘을 구현해보도록 하겠습니다!
'Toy Project > mini-portal [Unity2D]' 카테고리의 다른 글
[Unity 2D] Portal 같은 게임 만들기 #6 포탈, 포탈건, 캐릭터의 버그 해결 (0) | 2024.01.08 |
---|---|
[Unity 2D] Portal 같은 게임 만들기 #5 포탈건 매커니즘 구현하기 2 (포탈 생성하기) (0) | 2024.01.07 |
[Unity 2D] Portal 같은 게임 만들기 #4 포탈건 매커니즘 구현하기 1 (조준선 그리기) (0) | 2024.01.06 |
[Unity 2D] Portal 같은 게임 만들기 #3 포탈 매커니즘 구현하기 2(속도 변환) (0) | 2024.01.05 |
[Unity 2D] Portal 같은 게임 만들기 #2 포탈 매커니즘 구현하기 1(위치 변환) (0) | 2024.01.05 |