728x90

목차.

  1. 서론
  2. 본론
  3. 결론

 

서론

 

FPS, 플랫포머 등 다양한 게임에서 기어가기와 같은 기능들이 있습니다.

 

유니티에서 해당 방법을 구현하기 간단한 방법이 있습니다.

Collider를 키 입력에 맞춰서 제어하면 기어가기와 같은 애니메이션에 맞춰서 자연스러운 작동이 가능합니다.

 

이번 글에서 스크립트에서 Collider를 제어하는 방법에 대해서 다뤄보겠습니다.

 

본론

 

1. 오브젝트에 콜라이더를 추가

-저는 Capsule Collider를 추가하겠습니다

 

오브젝트에 Collider 추가

 

 2. 오브젝트에 맞게 Collider 값 설정

- Edit Collider를 눌러 편하게 조절이 가능합니다.

 

3. 콜라이더를 제어할 스크립트 추가

- 저는 플레이어에서 제어할 것이기 때문에 Player 클래스에서 작업했습니다.

 

4. 코드 작성

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

public class Player : MonoBehaviour
{

    [Header("Keybind")]
    public KeyCode crouchKey = KeyCode.LeftControl;
    private CapsuleCollider collider;
	float startYScale;
    void Start()
    {
        collider = GetComponent<CapsuleCollider>();
        startYScale = transform.localScale.y;
    }

    public void Update() // 무브먼트 업데이트 
    {
        Crouch();
    }
    private void Crouch() { //기어가기(콜라이더 사이즈 조절)
        if (Input.GetKey(crouchKey))
        {
            collider.center = new Vector3(0, 0.3f, 0);
            collider.height = 0.5f;
         
            //transform.localScale = new Vector3(transform.localScale.x, 1f, transform.localScale.z);
        }
        if (Input.GetKeyUp(crouchKey)) 
        {
            collider.center = new Vector3(0, 0.5f, 0);
            collider.height = 1f;
        
            //transform.localScale = new Vector3(transform.localScale.x, 2f, transform.localScale.z);
        }
    }
}

 

Collider Size 제어


키를 눌렀을 때

 

            collider.center = new Vector3(0, 0.3f, 0);
            collider.height = 0.5f;
            

collider.center는 x, y, z 값을 지정할 수 있으며 new Vector3을 통해 설정할 수 있습니다 콜라이더의 높이는 달라졌는데

센터 값이 같다면 의도와는 다르게 작동하기 때문에 적당한 값을 지정해 줍니다.

 

키를 땠을때

 

            collider.center = new Vector3(0, 0.5f, 0);
            collider.height = 1f;

 

다시 원래의 센터 값을 지정해 주고 높이도 원래대로 설정해 줍니다.

그러면 컨트롤을 눌렀을 때 콜라이더가 작아지고 때면 원래대로 돌아오는 것을 볼 수 있습니다.

 

키-입력으로-Collider를-제어
콜라이더가 작아지고 다시 커지는모습

 

 

transform.localScale제어


 

콜라이더뿐만 아니라 오브젝트 자체를 작아지게 하고 싶을 때는 로컬 스케일 값을 제어하면 됩니다.

 

키를 눌렀을 때

 

  transform.localScale = new Vector3(transform.localScale.x, 1f, transform.localScale.z);

 

transform의 로컬 스케일을 x, z값은 그대로 두고 y값을 1f로 설정해 준다면 마치 키가 순간 작아지는듯한 효과를 줄 수 있습니다 그리고 콜라이더만 제어했을 때와는 달리 오브젝트가 콜라이더를 포함해서 전체적으로 작아지게 됩니다.

 

키를 땠을때

 

transform.localScale = new Vector3(transform.localScale.x, 2f, transform.localScale.z);

 

마찬가지로 키를 땠을때 y값만 원래의 크기로 설정해 줍니다.

 

그러면 컨트롤을 눌렀을 때 전체적으로 y값이 작아지는 모습을 볼 수 있습니다.

 

 

키-입력으로-localScale-제어
localScale이 커지고 작아지는 모습

 

결론

 

이번 글에서는 클래스에서 Collider와 localScale을 제어하는 방법에 대해서 다뤄봤습니다.

 

 

 

728x90

+ Recent posts