Dreaming Deve1oper

[Unity 3D] 방향키로 오브젝트 제어하기 본문

유니티

[Unity 3D] 방향키로 오브젝트 제어하기

주현테크 2022. 1. 25. 02:21

 

C# Script를 통해 Object의 움직임을 제어하는 방법을
포스팅해보도록 하겠다.


우선, Character Controller Component에 대해 먼저 알아보도록하자.

Character Controller는 유니티에서 캐릭터의 제어를 위해 제공하는 컴포넌트이다.

 

Slope Limit: 올라갈 수 있는 경사의 한계 각도

Step Offset: 설정 값보다 낮은 높이의 오브젝트를 오를 수 있음

Center: 충돌 범위의 중심점

Radius: 충돌 범위의 반지름 (x, z)

Height: 충돌 범위의 높이 (y)

 


 

당연한 이야기겠지만, 오브젝트 제어를 위해 오브젝트를 생성해 주어야한다.
필자의 경우 Capsule 오브젝트를 생성하였고, 오브젝트의 이름을 Player로 변경하였다.

 

Player 오브젝트를 선택하고 Add component > Character Controller를 클릭해 추가해준다.

 


 

오브젝트 제어를 위한 스크립트를 작성해보도록 하겠다.

Project > 우클릭 > Create > C# Script를 클릭해 스크립트를 만들어준다.

스크립트 이름은 Movement3D로 작성하도록 하겠다.

 

코드는 아래를 참고하면 된다.

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

public class Movement3D : MonoBehaviour
{
    [SerializeField]
    private float moveSpeed = 5.0f;
    private Vector3 moveDirection;

    private CharacterController characterController;

    private void Awake()
    {
        characterController = GetComponent<CharacterController>();
    }

    private void Update()
    {
        characterController.Move(moveDirection * moveSpeed * Time.deltaTime);
    }

    public void MoveTo(Vector3 direction) 
    {
        moveDirection = direction;
    }

}

 

private float moveSpeed = 5.0f

 오브젝트의 이동속도를 의미한다.

 


private Vector3 moveDirection

 오브젝트의 이동방향을 의미한다.

 

 

  private void Update()
    {
        characterController.Move(moveDirection * moveSpeed * Time.deltaTime);
    }

이동방향, 이동속도, deltaTime을 기반으로 이동을 수행하는 characterController의 Move 함수를 호출한다.

 

 

    public void MoveTo(Vector3 direction) 
    {
        moveDirection = direction;
    }

→ MoveTo 함수를 외부에서 호출하여 매개변수에 방향정보를 가지고오면 해당 방향정보를 moveDirection에 저장.

 

 


 

같은 방법으로 한번 더 스크립트를 생성해준다.

스크립트 이름은 PlayerController로 작성하도록 하겠다.

 

코드는 역시 아래를 참고하면 된다.

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

public class PlayerController : MonoBehaviour
{
    private Movement3D movement3D;

    private void Awake()
    {
        movement3D = GetComponent<Movement3D>();
    }

    private void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");

        movement3D.MoveTo(new Vector3(x, 0, z));
    }
}

 


 

Movement3D, PlayerController 스크립트를

제어하고자 하는 오브젝트의 Add Componet에 drag & drop 해준다.

 

 

 

실행 버튼을 클릭하면,

영상과 같이 오브젝트가 방향키값에 따라 움직이는 것을 확인할 수 있다.

 

 

 


 

 

다음 포스팅에선 중력 적용에 관련하여 포스팅 할 예정이다.

 

 

 

 

 

출처: 고박사 유튜브

https://www.youtube.com/watch?v=NQg1_NVi-6o 

Comments