3-2. 5조 아주~5지조(임시)

keubung·2024년 10월 8일
  • Invoke(invoke라는 용어의 개념이 머리에 잘 안들어와서 하는 정리)

    • invoke: 언급하다, 들먹이다.
    • 특정 스레드에서 실행되는 메서드를 호출할 때 사용
    • 사용
    1. 대리자(메서드를 참조할 수 있는 객체) 선언
      delegate void MyDelegate(string message);
    2. 대리자 인스턴스를 선언하고 메서드 할당
      MyDelegate myDelegate = SomeMethod;
    3. Invoke로 대리자 메서드 호출
      myDelegate.Invoke("Invoke");
  • 1-6강의 약 30분 지점 OnLook함수의 설명
    worldPos-(Vector2)transform.position를 하는 이유

    • (a의 위치에서 b까지의 거리를 구하고 싶다면 b-a를 해야한다.)

    • 현재 worldPos는 내 마우스의 위치의 월드 상에서의 위치

    • 따라서 위 코드는 내 현재 위치((Vector2)transform.position)로부터 마우스의 위치가 어디에 있는지를 구하는 것

      전체 코드: newAim = worldPos-(Vector2)transform.position
      -> 월드 상에서 마우스의 위치가 플레이어의 위치로부터 어디에 존재하는지를 마우스의 위치(newAim)에 대입함.

       public void OnLook(InputValue value)
       {
           Vector2 newAim = value.Get<Vector2>();  
           // newAim은 마우스 위치를 받아오는 것이기 때문에 normalized를 하면 안됨
           // 마우스를 움직일 때마다 마우스 기준의 왼쪽 오른쪽이 달라지기 때문
           Vector2 worldPos = camera.ScreenToWorldPoint(newAim);
           newAim = (worldPos - (Vector2)transform.position).normalized;
      
           CallLookEvent(newAim);
       }
  • Quaternion

    • 유니티 인스펙터 창에서는 3가지 축을 사용하는 Vector3를 사용해서 회전을 표현하지만 실제로는 4가지 축을 사용하는 Quaternion을 사용한다.
      - 3가지 축일 때 짐벌 락(Gimbal Lock)문제가 발생할 수 있기 때문에
      - 짐벌 락(Gimbal Lock): 축이 3개일 때 회전을 하는 중 한 축과 다른 축이 합쳐지는 순간이 생겨 회전을 제대로 계산해내지 못하고 이상한 회전을 보이는 것.
    • 메서드 종류
      - Quaternion.Euler: 오일러각을 쿼터니언으로 변경
      - Quaternion.LookRotation: 머리를 회전하는 것처럼, 앞과 위를 특정한 방향으로 하는 회전 쿼터니언을 알려줌
      - Quaternion.Slerp: 쿼터니언과 다른 쿼터니언 사이에 내분점을 알려준다.
      (구형 보간(Spherical Linear Interpolation)기법을 활용해서 쿼터니언에 쓰면 더 정확해짐 - 아직 뭔지는 모르겠지만 정리)

  • 궁금한 것(알아볼 것)
    단축키: 정해둔 매개변수의 이름과 함수 안에서 사용한 그 매개변수의 이름을 동시에 고치는 단축키
profile
김나영(Unity_6기)

0개의 댓글