[TIL] Unity - InputSystem - day 34

뭉크의 개발·2023년 9월 4일
0

Unity - Camp

목록 보기
6/70
post-thumbnail

🐧 들어가기 앞서

새로운 팀이 구성되었다.

유니티를 오랜만에 다시 했는데, 문법을 배우고 오니 생각보다 코드가 잘 읽혔다.

또한 직관적인 UI를 보니, 개발하는게 재밌었다.

앞으로도 더더욱 공부를 열심히 하자.!


🐧 오늘 배운 것

  1. Pong 제작
  2. TopDownShooting 프로젝트 구현

🐧 기억할 것

InputSystem

  • Unity에서 InputSystem 패키지를 이용할 수 있다.
    Input System 패키지는 우리가 입력할 수 있는 모든 것(마우스, 키보드, 조이스틱, 패드 등)을
    입력값으로 받는 기능을 쉽게 구현하게 도와준다.

Apply

  • 유니티 Pacakage Manager에서 Input System Package를 설치한다.
  • 설치가 다 되면, Unity를 재시작한다.
  1. Input Repository를 생성한다.
  2. Create에서
  3. Input Actions를 클릭하면, Input System을 설정할 수 있게 된다.
  • 캐릭터의 움직임에 대해 구현을 해보자. 이름을 정한 뒤, 추가하고 저장한다.
  • 각 Type은 아래 박스와 같이 설정한다.
  • 위, 아래, 왼, 오에 대해 값을 설정할 수 있도록 Add 버튼을 눌러준다.
  • Path에서 해당하는 입력키를 설정한다. 방향키도 설정 가능하다.

  • 이제 마우스를 설정하자.
  • 키보드와 똑같이 Value, Vector 2로 Type을 정해준다.
  • Path에서 Mouse를 클릭하고
  • Position을 클릭한다. 마우스의 방향을 읽는 역할이다.

  • 키보드와 마우스 이외에도 다양한 기능을 구현할 수 있다.
    아래는 발사 입력을 구현하는 화면이다.

  • 왼쪽 버튼을 누르면, Fire값을 전달하게 해준다.

  • Save Asset으로 저장한다.

Bounce

  • Friction(마찰력) / Collider
    Fricition이 높으면, 마찰력이 높아서 오브젝트가 표면에서 잘 미끄러지지 않는다.
  • Bounciness(반발력) / Rigidbody
    오브젝트가 충돌하면, 얼마나 튕기는지를 나타낸다.
    값 0 -> 완전히 튕기지 않음.
    값 1 -> 입사각 = 반사각, 완전 탄성 충돌.

Is Trigger

물리적 충돌이 일어나면, 실제로 물리 충돌을 할 것인가?

  • Collision
    물리적 충돌이 일어나고, 충돌도 인지한다.

  • Trigger
    실제 충돌은 일어나지 않지만, 충돌을 인지한다.

TMP (Text Mesh Pro)

텍스트에게 다양한 스타일 및 효과를 적용할 수 있는 고급 텍스트 렌더링 솔루션.

PPU (Pixel per Unit)

Unity에서 스프라이트 이미지의 크기와 해상도를 제어하기 위한 설정 중 하나.

  • PPU 값이 높을수록 작은 스프라이트
    PPU 값을 높이면 스프라이트 이미지가 게임 월드에서 더 작다.
    즉, 동일한 이미지를 더 많은 픽셀로 나누어 더 작게 표현

  • PPU 값이 낮을수록 큰 스프라이트
    PPU 값을 낮추면 스프라이트 이미지가 게임 월드에서 더 크다.
    즉, 동일한 이미지를 적은 픽셀로 나누어 더 크게 표현

WorldPosition vs LocalPosition

  • World Position

    .position 속성을 사용하여 게임 오브젝트의 월드 좌표를 얻을 수 있다.
    게임 월드의 원점(세계의 중심)으로부터의 상대적인 위치다.

  • Local Position

    .localPosition 속성을 사용하여 게임 오브젝트의 로컬 좌표를 얻을 수 있다.
    이 좌표는 부모 게임 오브젝트로부터의 상대적인 위치를 나타낸다.
    만약 부모 게임 오브젝트가 없다면 로컬 좌표와 월드 좌표는 동일하다.

Time.deltaTime

https://velog.io/@paenge1004/TIL-Unity-day-9#timedeltatime

Math.Atan2

어진 두 개의 숫자를 사용하여 아크탄젠트 값을 계산

float Mathf.Atan2(float y, float x);
  • 예제
    라디안 단위의 아크탄젠트 값을 반환한다.
    일반적으로 아크탄젠트 함수를 사용하여 각도를 계산할 때는 Mathf.Rad2Deg 상수를 사용하여 라디안을 도(degree)로 변환한다.
Vector2 pointA = new Vector2(1.0f, 0.0f);  // 예: 점 A
Vector2 pointB = new Vector2(0.0f, 1.0f);  // 예: 점 B

float angle = Mathf.Atan2(pointB.y - pointA.y, pointB.x - pointA.x) * Mathf.Rad2Deg;

Unity Life Cycle

  • Initialization (초기화)
    게임 오브젝트가 생성될 때, Awake 메서드가 호출

  • Scene Loading (씬 로딩)
    씬이 로드될 때, Awake와 Start 메서드가 호출
    Awake는 모든 게임 오브젝트의 초기화에 사용되며,
    Start는 씬의 모든 게임 오브젝트가 초기화된 후 호출

  • Update (업데이트)
    게임 루프가 실행될 때, 모든 활성화된 게임 오브젝트의 Update 메서드가 호출
    매 프레임마다 호출되며 주로 게임 오브젝트의 상태를 업데이트하는 데 사용

  • FixedUpdate (고정된 업데이트)
    물리 시뮬레이션과 관련된 작업은 FixedUpdate 메서드에서 수행
    일정한 간격으로 호출되며 물리 시뮬레이션에 사용

  • LateUpdate (지연된 업데이트)
    모든 Update 메서드가 호출된 후, 활성화된 게임 오브젝트의 LateUpdate 메서드가 호출
    일반적으로 카메라와 관련된 작업 또는 다른 게임 오브젝트와의 상호 작용에 사용

  • Rendering (렌더링)
    모든 업데이트가 완료되면 Unity는 렌더링 단계로 이동하여 화면에 그래픽을 렌더링

  • Destroy (파괴)
    게임 오브젝트가 파괴될 때 OnDestroy 메서드가 호출
    게임 오브젝트가 삭제되기 전에 추가 정리 작업을 수행하는 데 사용

Normalized

주로 벡터(3D 또는 2D)의 크기를 1로 만드는 프로세스를 나타내는 용어

  • 3D
Vector3 originalVector = new Vector3(2.0f, 0.0f, 2.0f);
Vector3 normalizedVector = originalVector.normalized;
  • 2D
Vector2 originalVector = new Vector2(3.0f, 4.0f);
Vector2 normalizedVector = originalVector.normalized;

옵저버 패턴

C#의 이벤트와 델리게이트를 활용
옵저버 패턴은 한 객체의 상태 변화를 관찰하고,
해당 상태 변화에 대한 관련 객체들에게 알리는 디자인 패턴
게임에서 이벤트 처리, UI 업데이트, 게임 상태 관리 등 다양한 상황에서 사용


🐧 Homeworks

내일 개인 과제로 넘어가기!


🐧 수강후기

다시 유니티를 배울 수 있어 뭔가 재밌었다.

특히 직관적으로 캐릭터가 움직이고, 액션을 취하는게 귀여웠다.

내일은 개인과제를 진행하면서, 강의에서 부족한 부분을 보충학습해야겠다.

화이팅!

0개의 댓글