게임에서 점프대와 발사대를 사용하면 플레이어가 가지 못하는 구역을 이동할 수 있는 수단이다. 오늘은 점프 발사대를 구현 해보자


우선 점프 발사대를 구현 하기 위해 핵심 기능인 AddForce(Vector3 force, ForceMode mode)를 사용할 것 이다.

AddForce(Vecter3 force, ForceMode mode)란?

Unity에서 Rigidbody를 가진 객체에 물리적인 힘을 주어 오브젝트를 이동시킬 수 있는 기능이다.

_rigidbody.AddForce(Vector3 force, ForceMode mode);

매개변수 설명

  • Vecter3 force : 힘을 가할 방향과 크기
  • ForceMode mode : 힘을 가하는 방식 (4가지의 방식)
    • ForceMode.Force : 지속적인 힘을 가함 (시간에 따라 점진적)
    • ForceMode.Acceleration : 물체의 질량과 관계없이 가속 적용
    • ForceMode.Impulse : 순간적인 힘을 가함
    • ForceMode.VelocityChange : 질량 무시, 즉각적인 속도 반영 

기능 스케치

이제 이론을 알았으니 어떤 점프 발사대를 만들껀지 기능 스케치를 해보자

 

이렇게 앞으로 날라가는 발사대와 위로 점프하는 점프대를 만들 것이다.


코드 구현하기

JumpPlatfom.cs를 만들어 기본 코드를 작성해주자

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public enum JumpType // 점프대를 사용했을때 날라갈 방향 tyoe
{
    Up,
    forward 
}

public class JumpPlatform : MonoBehaviour
{
    public JumpType jumpType; // 점프대 Type
    public float jumpPadPower; // 점프대 힘

    bool OnJumpPad = false; // 점프대 위에 올라왔는지 확인하는 bool 값


    private void Update()
    {
    	// E키를 눌러 점프대 메서드 작동
        if (OnJumpPad &&Input.GetKeyDown(KeyCode.E))
        {
            JumpPad(jumpPadPower, jumpType);
        }
    }
	// 점프대 collision과 닿았을 때
    private void OnCollisionEnter(Collision _collision)
    {
        OnJumpPad = true;
    }
	// 점프대 collision에서 떨어 졌을 때
    private void OnCollisionExit(Collision collision)
    {
        OnJumpPad = false ;
    }
}

 

이렇게 점프대 collision에 닿았을 때와 떨어 졌을 때를 bool값을 이용하여 점프대 사용가능 하다는 준비를 해주고 Input 기능을 이용하여 키보드 E키를 눌렀을때 JumpPad() 매서드를 호출 해준다.

 


이제 점프 발사대의 작용할 힘의 로직을 작성하자 

public void JumpPad(float jumpValue, JumpType type)
{
    Vector3 jumpDirection = Vector3.zero;

    switch (type)
    {
        case JumpType.Up:
            jumpDirection = Vector3.up;
            break;
        case JumpType.forward:
            jumpDirection = (transform.forward + Vector3.up).normalized;
            break;
    }
    _rigidbody.AddForce(jumpDirection * jumpValue, ForceMode.Impulse);
}

 

 

점프대( JumpType.Up )는 Vector3.up 방향으로 ForceMode.Impulse 순간 적인 힘을 받아 위로 점프한다.

 

발사대( JumpType.forward )는 transform.forward(플레이어가 바라보는 방향)에 Vector3.up(윗방향)을 더해 이 둘의 중간 백터 방향으로 ForceMode.Impulse 순간 적인 힘을 받아 포물선으로 날아간다. 


실행 결과

점프대 (위로)

  • 플레이어가 점프대에 닿으면 위쪽으로 점프한다.
  • JumpPad(10f, JumpType.Up);  >> 위쪽 방향으로 점프

발사대 (전방)

  • 플레이어가 발사대 위에 서면 현재 바라보는 방향으로 날아간다.
  • JumpPad(15f, JumpType.forward); >> 현재 보고 있는 방향으로 점프.

 

+ Recent posts