오늘은 점프를 구현해보려고 합니다.
바로 실습하겠습니다.
일단 바닥을 생성합니다.
Hierarchy에서 오른쪽 클릭해서 3D Object - Plane 합니다.
다음은 점프할 객체를 생성합니다.
Cylinder를 이용하겠습니다.
3D Object - Cylinder
처음에는 약간 위로 떠있는 상태입니다.
그렇기 때문에 Cylinder의 초기 위치를 지정합니다.
다음은 Rigidbody를 추가합니다.
객체에 힘을 가해서 점프와 같이 보이게 하려고 합니다.
힘을 가다 보면 객체가 쓰러지는 현상이 발생할 수 있습니다.
이것을 방지하기 위해서 Rigidbody속성을 설정합니다.
constaints(제약) 설정을 보시면 Freeze Rotation에 x, z를 체크합니다.
x, z축으로 회전을 막는다는 의미입니다.
스크립트 추가
Cylinder에 스크립트를 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float m_fForce = 5.0f;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GetComponent<Rigidbody>().AddForce(Vector3.up * m_fForce, ForceMode.Impulse);
}
}
}
|
cs |
Rigidbody의 AddForce를 이용해서 객체에 힘을 가합니다.
객체의 위쪽 방향으로 5만큼의 힘을 가합니다.
ForceMode.Impulse는 질량의 영향을 받으면서 힘을 가하는 옵션입니다.
옵션은 다음과 같습니다.
Force rigidbody에 지속적인 힘 추가, 질량 사용.
Acceleration rigidbody에 지속적인 가속 추가, 질량 무시.
Impulse rigidbody에 순간적으로 충격 추가, 질량 사용.
VelocityChange rigidbody에 순간속도 변경, 질량 무시.
스페이스키를 입력하면 객체가 점프하는 것을 볼 수 있습니다.
근데 스페이스키를 계속 입력하면 계속 점프를 하는 것이 확인됩니다.
점프 중에는 스페이스 입력을 받지 않게 하기 위해서는 다음과 같이 구현할 수 있습니다.
Plane 오브젝트에 태그를 변경해야 합니다.
일단 태그를 추가하겠습니다.
"Plane"라고 태그를 만듭니다.
Tag를 Plane로 변경합니다.
그리고 스크립트를 수정합니다.
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
32
33
34
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float m_fForce = 5.0f;
bool m_bJumping = false;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if(!m_bJumping)
{
GetComponent<Rigidbody>().AddForce(Vector3.up * m_fForce, ForceMode.Impulse);
m_bJumping = true;
}
}
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Plane"))
{
m_bJumping = false;
}
}
}
|
cs |
스페이스 키를 누를 때 점프 중이 아닐 때만 점프가 가능하도록 하고, AddForce함수가 호출되었을 때, 점프 중으로 m_bJumping 값을 true로 변경합니다.
OnCollisionEnter함수를 사용해 오브젝트가 바닥과 충돌했을 때를 나타냅니다.
OnCollisionEnter는 충돌했을 때 발생하는 함수입니다.
충돌한 오브젝트의 태그가 "Plane"일 때 m_bJumping 값을 false로 만들어서 점프가 가능하도록 합니다.
이렇게 구현하면 여러 번 점프가 불가능하도록 구현할 수 있습니다.
'개발공부 > 유니티' 카테고리의 다른 글
[Unity] 유니티 Invoke, InvokeRepeating, CancelInvoke (0) | 2019.10.25 |
---|---|
[Unity] 유니티 코루틴(Coroutine) (0) | 2019.10.24 |
[Unity] 오브젝트를 키보드 이동 (0) | 2019.10.08 |
[Unity] 유니티 마우스 클릭 객체 이동 (0) | 2019.10.07 |
[Unity] 유니티 Toggle UI 초기값 넣을 때 문제 (0) | 2019.10.06 |