스페이스바를 눌렀을 때 오브젝트가 점프할 수 있도록 하는 방법은 어렵지 않다.
1. 오브젝트가 떨어지지 않게 땅 오브젝트 (Plane)을 추가해준다.
1. 플레이 할 플레이어 오브젝트에 Rigidbody 컴포넌트를 추가한다.
2. 플레이어 오브젝트의 스크립트에 Rigidbody 컴포넌트를 가져와서 저장한다.
3. If함수와 GetKey함수를 이용하여 스페이스바를 누르면 작동하도록 작성한다.
4. Rigidbody에 AddForce함수를 적용시켜 순간적인 물리적 힘이 작동하도록 한다.
5. AddForce함수에 인수를 입력하여 힘의 방향과 강도를 정한다.
이를 정리한 스크립트는 아래와 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Rendering;
using UnityEngine;
public class Player : MonoBehaviour
{
public float jumpPower; // 점프하는 힘
Rigidbody rb; // rigid에 이름짓기
void Start()
{
rb = GetComponent<Rigidbody>(); // 오브젝트의 rigid 가져와서 저장
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Space)) // 만약 스페이스파를 누르면
{
rb.AddForce(Vector3.up*jumpPower,ForceMode.Impulse); // 위로 순간적인 힘이 발생
}
}
}
오브젝트에 이 스크립트를 적용한 오브젝트의 인스펙터를 살펴보면 아래처럼 JumpPower를 설정할 수 있다.
기본적으로 0으로 되어있는데, 0으로 되어있으면 힘이 없어 점프하지 못하므로 숫자를 넣어주어야 한다.
적용 후 플레이해보면 오브젝트는 스페이스바를 누를 때마다 제한 없이 점프를 한다.
이를 제한하기 위해서는 위의 스크립으 내용 중 if 함수에 조건을 추가해주면 된다.
하지만 if 함수에 조건만 추가하면 제한만 둘 뿐이어서 해당 수만큼 점프하고 더이상 점프를 할 수 없게 된다.
그래서 점프 횟수 초기화를 시켜야 하는데, 이는 OnCollisionEnter 함수를 이용하면 된다.
플레이어 오브젝트는 땅에 닿을 때 통과하면 안되므로 isFrigger에 체크를 해제해두었다.
따라서 충돌할 때 호출하는 OnCollisionEnter함수를 이용하여 충돌하는 순간 점프수를 0으로 초기화하면 된다.
이제 스크립트에 적용하면 아래와 같다.
(참고로 스크립트를 가볍게 하기 위해 땅인 Plane 오브젝트는 Ground를 tag로 하여 적용했다. )
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Rendering;
using UnityEngine;
public class Player : MonoBehaviour
{
public float jumpPower; // 점프하는 힘
int jumpCount; // 점프 횟수
Rigidbody rb; // rigid에 이름짓기
void Start()
{
rb = GetComponent<Rigidbody>(); // 오브젝트의 rigid 가져와서 저장
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Space) && jumpCount<2) // 만약 스페이스파를 누르면 / 2번 미만일 때
{
rb.AddForce(Vector3.up * jumpPower, ForceMode.Impulse); // 위로 순간적인 힘이 발생
jumpCount++; // 점프시 1씩 추가한다.
}
}
private void OnCollisionEnter(Collision collision) // 충돌 시작하면 호출
{
if (collision.gameObject.tag == "Ground") // 충돌한 물체의 tag가 Ground 일 때
{
jumpCount = 0; // 점프 횟수를 초기화한다.
}
}
}
이를 플레이어 오브젝트에 적용하면 플레이어는 스페이스바로 한번에 2번 점프할 수 있고, 땅에 닿는 순간 다시 2번 점프할 수 있게 된다.
참고 : tag 방법 https://greenchoco.tistory.com/226
참고 : OnCollisionEnter 함수 https://greenchoco.tistory.com/225
참고 : Rigidbody의 개념 https://greenchoco.tistory.com/166
참고 : Addforce 인수 종류 https://greenchoco.tistory.com/224
참고 : Getkey등 입력함수 정리 https://greenchoco.tistory.com/219
'유니티 C# > C#' 카테고리의 다른 글
C#기초 - 이동과 점프 구현할 때 Transform와 Rigidbody 충돌 오류 (0) | 2024.05.01 |
---|---|
C#기초 - isTrigger에 따른 OnCollision함수와 OnTrigger함수 (0) | 2024.04.30 |
C#기초 - Addforce함수와 ForceMode 종류 (0) | 2024.04.30 |
C#기초 - 방향키로 이동하기 (Input Manager, GetAxis, Vector3) (0) | 2024.04.29 |
C#기초 - 이동 함수와 인수 종류 (키보드, 마우스, 모바일) (1) | 2024.04.26 |
댓글