본문 바로가기

유니티

[유니티] Controller Example

앞에서는 단순 좌우 위아래 움직임을 하였다면 이번 코드에서는 방향키 개선과, GameObject 회전, 회전한 머리방향의 기준으로 좌우위아래 움직이기를 설명할 것임

 

방향키 개선 - GetAxis()메서드

 

GetAxis 메서드란? 어떤 축에 대한 입력값을 숫자로 반환하는 메서드임 

edit > project settings > input Manager에 지정된 값으로 물체가 움직임

 

float Input.GetAxis(string axisName);

 

메서드의 축의 이름을 받아 감지된 입력값 반환

Horizotal 축 수평

Vertical 축 수직

InputGetAxis출력 값
Horizontal(x) Vertical(z)
1.0
1.0
0

0
-1.0
-1.0

 

    private void ControllerAxis()
    {
        //Axis 축 아날로그 축을 가져오는것과 비슷 
        float vertical = Input.GetAxis("Vertical");
        if(vertical != 0f)
        {
            transform.position =
            transform.position +
            (Vector3.forward * vertical * moveSpeed * Time.deltaTime);
        }

        float horizontal = Input.GetAxis("Horizontal");

    }

내현재위치는 =  내 현재위치 + (앞으로 향하는 y값(forward) *  메서드에 입력된vertical 값 * 속력 * 한프레임마다의 시간)

 

회전 - 회전타입 쿼터니언, 짐벌락

현재 유니티 패널창에 있는 transform은 xyz로 입력받을 수 있게 나오는데 실제 타입은 쿼터니언

쿼터니언이 나온 배경

오일러는 x축 곱하고 y축 곱하고, z축 곱하면 회전이 나오게됨

한축이 90도로 움직이게 되면 축이 같아지는 때가 옴 그렇게되면 결국 2개의 축만 사용이 가능해지는 상태가 됨

ex)옛날 총게임에서 하늘을 90도 꺽어서 머리윗 하늘을 볼 수 없는 이유와 같음

출처 : https://www.youtube.com/watch?v=yxMQKsab5TQ

 

짐벌락

 

if(Input.GetKey(KeyCode.Q))
{
    Vector3 euler = transform.rotation.eulerAngles;
    //euler.y += rotSpeed * Time.deltaTime;
    euler.y -= rotSpeed * Time.deltaTime;
    transform.rotation = Quaternion.Euler(euler);
}

 

회전방향으로 움직이기 - 전역공간, 오브젝트 공간 .. 추후작성

회전시 주의할 점 - 부모에 의한 자식의 회전과 스케일 확인