목차.
서론
FPS, 플랫포머 등 다양한 게임에서 기어가기와 같은 기능들이 있습니다.
유니티에서 해당 방법을 구현하기 간단한 방법이 있습니다.
Collider를 키 입력에 맞춰서 제어하면 기어가기와 같은 애니메이션에 맞춰서 자연스러운 작동이 가능합니다.
이번 글에서 스크립트에서 Collider를 제어하는 방법에 대해서 다뤄보겠습니다.
본론
1. 오브젝트에 콜라이더를 추가
-저는 Capsule 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;
다시 원래의 센터 값을 지정해 주고 높이도 원래대로 설정해 줍니다.
그러면 컨트롤을 눌렀을 때 콜라이더가 작아지고 때면 원래대로 돌아오는 것을 볼 수 있습니다.
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값이 작아지는 모습을 볼 수 있습니다.
결론
이번 글에서는 클래스에서 Collider와 localScale을 제어하는 방법에 대해서 다뤄봤습니다.
'유니티' 카테고리의 다른 글
[Unity] 유니티 : 버튼 클릭으로 기하평균 내기 (0) | 2022.08.16 |
---|---|
[Unity 3D] 유니티 3D : Tranform 오브젝트 관통 ,통과 문제 (0) | 2022.08.14 |
[Unity 3D] 유니티 3D : AddForce 벽 관통, 뚫림, 오브젝트 통과 문제 (0) | 2022.08.08 |
[Unity] 캔버스 활성화 비활성화(FadeIn,FadeOut) (0) | 2022.08.08 |
[Unity 3D] 마우스 움직임으로 카메라 제어하는 방법 (2) | 2022.08.06 |