Unity 이론 (Vector, 내적, 외적, Sign)

로젠·2024년 4월 29일
0

게임 프로그래밍

목록 보기
28/49
post-thumbnail

Vector

p1+p2는 위치벡터이고 p1-p2 는 p2가 p1을 바라보는 방향벡터이다. 방향벡터의 길이는 거리이고 방향벡터는 정규화하여 사용한다. 정규화는 자기 자신으로 자기 자신을 나눠 크기가 1이 된다.

내적(Dot)

앞뒤는 구분 가능하지만 좌우는 구분 불가능하다. 나를 기준으로 왼쪽 오른쪽을 구별하기 위해 사용한다. 호도법을 사용하여 0도일 때 1/2π(rad)이고 180도 일 때는 -1/2π(rad)이다. 내적은 내 값을 구하기 위해 사용한다. 기준 모델을 중심으로 정면에 있으면 1 뒤에 있으면 -1 오른쪽과 왼쪽은 0이 나온다.

private GameObject cube2;
private void Update()
{
	Vector3 posiotion = transform.position;
    Vector3 position2 = cube2.transform.position;
    result = position2 - position;
}
private float dot;
private void OnDrawGizmo()
{
	dot = Vector3.Dot(transform.forward, result.nomalized);
}

외적(Cross)

외적은 시계방향으로 가서 수직을 나타낸다. 외적을 이용하면 y 값을 가져올 수 있다. y 값을 이용하여 90 도와 -90를 구분할 수 있다. y 값이 0보다 크면 90도 y 값이 0보다 작으면 -90도이다. 360분 법을 구하기 위해서는 내적과 외적 둘 다 사용한다.

private GameObject cube2;
private void Update()
{
	Vector3 posiotion = transform.position;
    Vector3 position2 = cube2.transform.position;
    result = position2 - position;
}
private Vector3 cross;
private void OnDrawGizmos(){
	cross = Vector3.cross(transform.forward, result);
    Gizmos.DrawLine(transform.position, transform.position + cross);
}

Sign

Sign은 해당 값이 0보다 작으면 -1, 0보다 크면 1을 리턴해준다.

private Vector3 cross;
private void OnDrawGizmos(){
	cross = Vector3.cross(transform.forward, result);
    Gizmos.DrawLine(transform.position, transform.position + cross);
}
private void OnGUI()
{
	float y = Vector3.Dot(cross,Vector3.up);
    float sign = Mathf.Sign(y);
}

0개의 댓글