플레이어가 맞은 부분을 매개변수로 받습니다.
public void ShowHitEffect(Vector3 hit)
맞은 부분의 벡터를 월드 좌표계로 변환합니다.
Vector3 hitInCameraSpace = Camera.main.WorldToScreenPoint(hit);
화면에 보이는 원점을 잡습니다.
Vector2 circlePosition = new Vector2(Screen.width / 2f, Screen.height / 2f);
원의 위치와 화면 좌표를 이용하여 각도를 계산합니다.
float angle = Mathf.Atan2(hitInCameraSpace.y - circlePosition.y, hitInCameraSpace.x - circlePosition.x);
distanceFromCrosshair은 원점에서 이미지를 띄울 거리입니다.float offsetX = Mathf.Cos(angle) distanceFromCrosshair;
float offsetY = Mathf.Sin(angle) distanceFromCrosshair;
이렇게 플레이어가 맞은 부분으로 히트 이미지가 뜨도록 만들어보 았습니다.// 원 바깥쪽에 위치한 지점 계산 Vector2 outerPoint = circlePosition + new Vector2(offsetX, offsetY); // UI 오브젝트의 위치를 조정 playerHitImage.transform.position = outerPoint; playerHitImage.transform.rotation = Quaternion.Euler(0,0, angle * Mathf.Rad2Deg -90f);
private WaitForSeconds delayTime = new WaitForSeconds(1f); ... IEnumerator DeactivateEffectAfterDelay() { yield return delayTime // 이미지를 비활성화하여 피격 이펙트를 숨김 playerHitImage.SetActive(false); deactivateCoroutine = null; // 코루틴이 종료되었음을 나타내는 변수 초기화 }