TIL (85) | 2023.11.24 | 피격 이미지 회전

kjg5370·2023년 11월 24일
0

TIL

목록 보기
83/91
post-thumbnail

오늘 배운 것

  • 플레이어가 맞은 부분을 기준으로 피격 이미지의 좌표 및 회전을 바꾸기 위해 스크립트를 변경하였습니다.
  1. 플레이어가 맞은 부분을 매개변수로 받습니다.

    public void ShowHitEffect(Vector3 hit)

  2. 맞은 부분의 벡터를 월드 좌표계로 변환합니다.

    Vector3 hitInCameraSpace = Camera.main.WorldToScreenPoint(hit);

  3. 화면에 보이는 원점을 잡습니다.

    Vector2 circlePosition = new Vector2(Screen.width / 2f, Screen.height / 2f);

  4. 원의 위치와 화면 좌표를 이용하여 각도를 계산합니다.

    float angle = Mathf.Atan2(hitInCameraSpace.y - circlePosition.y, hitInCameraSpace.x - circlePosition.x);

  1. 이 각도로 좌표를 구합니다.

    float offsetX = Mathf.Cos(angle) distanceFromCrosshair;
    float offsetY = Mathf.Sin(angle)
    distanceFromCrosshair;

    distanceFromCrosshair은 원점에서 이미지를 띄울 거리입니다.
  2. 이미지의 좌표에 대입해줍니다.
     // 원 바깥쪽에 위치한 지점 계산
     Vector2 outerPoint = circlePosition + new Vector2(offsetX, offsetY);
    
      // UI 오브젝트의 위치를 조정
     playerHitImage.transform.position = outerPoint;
     playerHitImage.transform.rotation = Quaternion.Euler(0,0, angle * Mathf.Rad2Deg -90f);
    이렇게 플레이어가 맞은 부분으로 히트 이미지가 뜨도록 만들어보 았습니다.

기억 할 것

  • 코루틴 사용
    이미지를 띄울 때 코루틴을 사용
    yield return 을 사용할 때 new를 쓰게 된다면
    이것을 캐싱해서 사용하기
    private WaitForSeconds delayTime = new WaitForSeconds(1f);
    ...
    
     IEnumerator DeactivateEffectAfterDelay()
     {
         yield return delayTime
         // 이미지를 비활성화하여 피격 이펙트를 숨김
         playerHitImage.SetActive(false);
         deactivateCoroutine = null; // 코루틴이 종료되었음을 나타내는 변수 초기화
     }

진행 사항

  • 맵에 적 배치하기
  • 적들이 서로 겹쳐 계속해서 달려가는 문제
    • 레이로 앞에 1f만큼의 거리를 측정해 Enemy라면 Idle상태로 전환
    • 네비 메쉬를 멈춘 후 타깃 재 설정
  • 계단의 난간을 올라타는 문제
    • 난간에 박스 콜라이더를 씌운 뒤 총알은 통과하도록 레이어 설정
  • 플레이어 피격 이펙트 수정
    • 데미지UI 오브젝트 풀 이용
    • 피격 이미지 좌표 및 회전 플레이어가 맞은 곳 기준으로 변환
  • 그래픽 설정 URP Assets 추가
    • LOW,MIDDLE,HIGH 로 구성
  • Elite Enemy 수정
    • EnemySpawner에서 생성
    • 2페이즈 애니메이션 좌우 이동에 맞게 재
profile
학생입니다

0개의 댓글