[Go-Unity 3D] 11. 3D CharacterController 컴포넌트 ⭐
카테고리: Go Unity
CharacterController, Slope Limit, Step Offset 3D움직임, 경사각, 계단
고박사의 유니티 기초를 정리.
3D
1.Character Controller
- 3차원 게임에서 사람 형태의 캐릭터 움직임과 관련된 제어를 위해 사용
- 캡슐 형태의 충돌 범위가 포함되어 있다.
- Slope Limit : 올라갈 수 있는 경사 한계 각
- Step Offset : 설정 값보다 낮은 높이의 계단을 오를 수 있다.
- Center : Capsule 충돌 범위의 중심점
- Radius : Capsule 충돌 범위의 반지름 (x,z)
- Height : Capsule 충돌 범위의 높이 (y)
2. 이동,점프 CS
1). Movement3D.cs
Movement3D.cs
using UnityEngine;
public class Movement3D : MonoBehaviour
{
[SerializeField]
private float moveSpeed = 5.0f; //이동 속도
private float gravity = -9.81f; //중력 계수
private float jumpForce = 3.0f; //점프 힘
private Vector3 moveDirection; //이동 방향
private CharacterController characterController;
private void Awake() {
characterController = GetComponent<CharacterController>();
}
private void Update() {
if (characterController.isGrounded ==false){
//땅에 있지않으면 중력적용
moveDirection.y += gravity * Time.deltaTime;
}
characterController.Move(moveDirection * moveSpeed * Time.deltaTime);
}
public void MoveTo(Vector3 direction){
//moveDirection = direction;
moveDirection = new Vector3(direction.x, moveDirection.y, direction.z);
}
public void JumpTo(){
if (characterController.isGrounded ==true){
moveDirection.y = jumpForce;
}
}
}
- moveto => 방향으로 이동하기, 중력적용
- Jumpto => 조건만족시 점프
2). PlayerContorller
PlayerContorller.cs
using UnityEngine;
public class PlayerContorller : MonoBehaviour
{
private Movement3D movement3D;
private void Awake() {
movement3D = GetComponent<Movement3D>();
}
private void Update() {
if (Input.GetKeyDown(KeyCode.Space)){
movement3D.JumpTo();
}
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
movement3D.MoveTo(new Vector3(x,0,z));
}
}
- 상하좌우 이동
- Movement3D moveto,jumpto 상황에맞게 사용
3.경사,계단
Character Controller
- Slope Limit : 각이 x이하일때 경사를 오를 수 있다.
- Step Offset : 계단의 높이 차이가 x이하일때 오를 수 있다.
4. Character Controller 정리
- 3D움직임의 제어에 사용
- Capsule 충돌 범위를 가지고있다.
- 경사각, 계단 오르는정도를 설정할 수 있다.
- 3D는 중력을 코드로 추가 해주어야 되는것 같다.
댓글남기기