Unity Engine

유용한 공식 - 직선에 대한 한 점의 직각 좌표 구하기

Aostols 2022. 11. 10. 08:55
반응형

제목이 약간 애매한데 그림을 보시면 이해가 빠르실 것입니다.

화면 하단에 플레이어가 있습니다.

플레이어의 forward는 붉은색 직선 입니다.

우측에 적이 있습니다.

플레이어의 forward기준으로 직각이 되는 녹색 직선을 구하는 - 정확히는 녹색직선과 붉은색 직선의 교차점을 구하는 내용 입니다.

 

이 내용을 찾아보게 된 것은 실제로 필요 해서였고 붉은색 직선을 기준으로 좌우로 데미지가 약해지는 등의 기획에서 쓸 수 있습니다.

Collider를 분리하면 되지 않냐고 할수 있겠지만 Collider를 적게 쓰는것이 서버와의 협업에 좋았기 떄문에 이러한 공식을 찾게 되었습니다.

 

우선 이름을 정하자면

A : 플레이어

B : 목표

C : 교차점

 

모든 계산은 A를 기준으로 처리 합니다.

void Start()
{
    Vector3 ForwardPos = transform.position + transform.forward * 10;
    Debug.DrawLine(transform.position, ForwardPos, Color.red, 3f);

    Vector3 PosC = GetNewLine(transform.position, ForwardPos, CurrentTarget.transform.position);
    Debug.DrawLine(PosC, CurrentTarget.transform.position, Color.green, 3f);
}

private Vector3 GetNewLine(Vector3 A, Vector3 B, Vector3 C)
{
    Vector3 abNormal = (B - A).normalized;
    float angle = Vector3.Dot(abNormal, C - A);
    Vector3 v1 = angle * abNormal;
    Vector3 v2 = A + v1;
    return v2;
}

 

반응형