반응형

오늘은 점프를 구현해보려고 합니다.

 

바로 실습하겠습니다.

 

일단 바닥을 생성합니다.

 

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로 만들어서 점프가 가능하도록 합니다.

 

이렇게 구현하면 여러 번 점프가 불가능하도록 구현할 수 있습니다.

 

반응형

+ Recent posts