반응형
제목이 약간 애매한데 그림을 보시면 이해가 빠르실 것입니다.
화면 하단에 플레이어가 있습니다.
플레이어의 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;
}
반응형
'Unity Engine' 카테고리의 다른 글
[Unity] Cinemachine - 초기 세팅 (0) | 2022.12.19 |
---|---|
[Unity] CharacterController.Move 가 Update에서 동작하지 않는 현상 (0) | 2022.12.16 |
[Unity]CollisionFlag - CharacterController (0) | 2022.11.06 |
[Unity]Physics 와 Layer (0) | 2022.11.01 |
Behavior Tree - AI 이동 디테일 (0) | 2022.07.10 |