//구글콘솔 광고 추가가
728x90
반응형

// 절대값을 입력해서 회전을 하고 싶다면 

transform.eulerAngles를 사용.

ex) transform.eulerAngles = new Vector3(0.0f, Time.deltaTime * 100f, 0.0f);

- 각도가 360도를 초과하면 증가시키지 말고, 대신에 Transform.Rotate를 사용해야된다.

 

// 특정 축을 기준으로 얼마만큼 회전을 시키고 싶다 한다면

transform.Rotate()를 사용.

ex) transform.Rotate(new Vector3(0.0f, Time.deltaTime * 100f, 0.0f));

 

// 원하는 특정방향을 쳐다보고 싶게 하고 싶다면

transform.rotation = Quaternion.LookRotation(벡터방향);

 

// 자연스럽게 회전하면서 쳐다보고 싶다면

Quaternion.Slerp()를 사용.

transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(벡터방향), 0부터 1사이의 float값);

- float 값이 0일경우 transform.rotation = transform.rotation,

  float 값이 1일 경우 transform.rotation = Quaternion.LookRotation(벡터방향)이기 때문에 적절한 중간값으로 대입.

 

// < Quaternion.Slerp() > 구면 선형 보간

- public static Quaternion Slerp (Quaternion a, Quaternion b, float t);

: a와 b 사이에 구형으로 t씩 보간한다. 파라미터 t는 [0, 1] 범위로 고정.

 

// 짐벌락 확인 키워드( 짐벌락이란 : 같은방향으로 오브젝트의 두 회전 축이 겹치는 현상 )

euler(gimbal lock) explained

https://www.youtube.com/watch?v=zc8b2Jo7mno&ab_channel=GuerrillaCG

 

// player 이동키

  1. void playerMove()
        {
            float dirX = Input.GetAxis("Horizontal");
            float dirY = Input.GetAxis("Vertical");

            Vector3 dirXY = (Vector3.right * dirX) + (Vector3.forward * dirY);

            transform.position += dirXY * playerSpeed * Time.deltaTime;
        }
  2.   void playerMove2()
        {
            if (Input.GetKey(KeyCode.W))
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), 0.2f);
                transform.position += Vector3.forward * playerSpeed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.S))
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), 0.2f);
                transform.position += Vector3.back * playerSpeed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.A))
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.left), 0.2f);
                transform.position += Vector3.left * playerSpeed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.D))
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), 0.2f);
                transform.position += Vector3.right * playerSpeed * Time.deltaTime;
            }
        }
728x90
반응형

+ Recent posts