// 절대값을 입력해서 회전을 하고 싶다면
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 이동키
- 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;
} - 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;
}
}
'유니티' 카테고리의 다른 글
Layer Mask 와 Layer Tag (0) | 2022.08.16 |
---|---|
Raycast에 대해 알아보자. + Input.mousePosition (0) | 2022.08.12 |
Collision, Trigger, RigidBody 에 대하여 공부해보자. (1) | 2022.08.12 |
ResourceManager 클래스를 만들어 보자. (0) | 2022.08.11 |
Input Manager 클래스를 만들어보자. (1) | 2022.08.10 |