CHARACTER ROTAION
1
2
3
4
5
6
7
8
9
10
11
12
13
|
using UnityEngine;
using System.Collections;
public class Player_Controller : MonoBehaviour
{
public GameObject Target;
void Update ()
{
transform.LookAt(Target.transform);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
using UnityEngine;
using System.Collections;
public class Player_Controller : MonoBehaviour
{
public GameObject Target;
void Update ()
{
Quaternion targetRot = Quaternion.LookRotation(
Target.transform.position);
transform.rotation = Quaternion.Lerp(
transform.rotation, targetRot, Time.deltaTime * 5);
}
}
|
cs |
[코드가 잘려서 코드가 이상하게 작성된 부분이 거슬린다..ㅠ]
[결과]
방법 3 .각도 (FLOAT) 값으로 이동시키는 방법
약간의 수학공식이 필요한 이 방법은 내 좌표를 기준으로 해서 각도를 구하고 그 각도만큼 캐릭터를 회전 시키는 방법입니다.
(유니티 기본 어셋의 캐릭터 회전 방식)
a 만큼 돌아야 하니까 z/x를 통해 탄젠트 값으로 각도를 구하면(역삼각함수 아크 탄젠트)
그 각도 만큼 캐릭터를 회전시키는 방법입니다.
[코드 -1 ] - Rotate 회전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
using UnityEngine;
using System.Collections;
public class Player_Controller : MonoBehaviour
{
public GameObject Target;
public Vector3 velocity;
public Vector3 rot;
public float turnSpeed = 180f;
void Update ()
{
velocity = Target.transform.position;
velocity.y = 0;
velocity.Normalize();
rot = transform.InverseTransformDirection(velocity);
float turnAmount = Mathf.Atan2(rot.x, rot.z);
transform.Rotate(0, turnAmount * Time.deltaTime * turnSpeed, 0);
}
}
|
cs |
[코드 -2] - 오일러 회전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
using UnityEngine;
using System.Collections;
public class Player_Controller : MonoBehaviour
{
public GameObject Target;
public Vector3 velocity;
public float rot;
public float turnSpeed = 180f;
void Update ()
{
velocity = Target.transform.position - transform.position;
float turnAmount = Mathf.Atan2(velocity.x,
velocity.z) * Mathf.Rad2Deg;
rot = Mathf.LerpAngle(transform.eulerAngles.y,
turnAmount, Time.deltaTime * turnSpeed);
transform.eulerAngles = new Vector3(0, rot,0);
}
}
|
cs |
[결과]
[함수 설명]
Mathf.Atan2 |
탄젠트로 라디안 각도를 계산합니다. |
Transform.TransformDirection |
로컬 좌표에서 월드 좌표로 방향을 변경합니다. (나의 좌표는 무시) |
함수 설명만으로는 이해하기가 상당히 난해한데.. 풀어 풀어 설명하자면..
나의 로컬 방향을 기준으로 특정 위치의 벡터(로컬 좌표)를 구한다고 할 수 있습니다.
위에 왼쪽 스크린 샷을 (1,1)에 있는 캐릭터에게 해당 함수의 매개변수를 (3,3)을 입력한다면
값은 (3,3)이 나옵니다.
그럼 이때 캐릭터를 45도 돌리면, (4.2 , 0)이 됩니다. 해당 벡터의 길이가 (4.2426...이므로)
쉽게 기준이 되는 로컬 좌표가 45도 돌았기 때문에 처음 3,3 벡터를 45도 돌린다고 생각해보시면
됩니다.
Transform.InverseTransformDirection |
월드 좌표에서 로컬 좌표로 방향을 변경합니다. |
이것도 설명만으로는 이해하기가 상당히 난해한데...이것도 풀어 풀어 설명하자면...
나의 로컬 방향을 기준으로 특정 위치의 벡터(월드 좌표)를 구한다고 할 수 있습니다.
더 쉽게 Transform.TransformDirection 과 반대되는 함수입니다.
Transform.InverseTransformDirection 나 , Transform.TransformDirection 함수
모두 행렬에 관한것으로 게임 수학에서 자세히 다루어 보겠습니다.
'엔진 > Unity' 카테고리의 다른 글
[UNITY] Custom Unity Shaders (0) | 2016.11.07 |
---|---|
[UNITY] 오브잭트 풀링 - OBJECT POOLING (0) | 2016.09.29 |
[UNITY]]이벤트 함수 호출 순서 (0) | 2016.09.28 |