Unreal Engine, Input Config 이해

πŸ’‘
언리얼 에디터λ₯Ό Lyra μ†ŒμŠ€μ½”λ“œ 기반으둜 μ‚¬μš©ν•˜κ³  μžˆλ‹€.

Lyra 곡용 ν΄λ”μ˜ InputData_SimplePawn은 μ–΄λ–»κ²Œ κ΅¬μ„±λ˜μ–΄μžˆλŠ”μ§€ ν™•μΈν•˜κ³  이해해보도둝 ν•œλ‹€.

ν•΄λ‹Ή νŒŒμΌμ€ Lyra의 All > Content > Input 폴더에 확인할 수 μžˆλ‹€.

  • Native Input Actions: μ‘°μ΄μŠ€ν‹±, ν‚€λ³΄λ“œ μž…λ ₯을 λ°›μœΌλ©΄ 이동과 κ΄€λ ¨λœ 좜λ ₯을 맀핑을 λ‹΄λ‹Ήν•˜κ³  μžˆλ‹€.
  • Ability Input Actions: νŠΉμ •ν‚€ μž…λ ₯을 λ°›μœΌλ©΄ 점프, μŠ€ν‚¬ 좜λ ₯을 맀핑을 λ‹΄λ‹Ήν•˜κ³  μžˆλ‹€.

Native, Ability Input Actions λ°°μ—΄ 객체

  • Index[0] λ°°μ—΄μ˜ ν˜•νƒœλ‘œ λ‚˜μ—΄λ˜μ–΄μžˆκ³  참쑰된 곳으둜 ν™•μΈν•˜λ©΄ Input Action, Input Tag κ°€ μžˆμŒμ„ 확인할 수 μžˆλ‹€.

Input Tag ?

Index 참쑰된 κ³³μ—μ„œ λ…νŠΉν•˜κ²Œ Input Tag λ₯Ό μΆ”κ°€ν•˜μ—¬ Enumerate 역할을 λ‹΄λ‹Ήν•˜κ³  Input Actionκ³Ό λ§€ν•‘ν•˜λŠ” κ΄€κ³„λ‘œ 보여지고 μžˆλ‹€.

  • Input Tag: ν‚€λ³΄λ“œ λ˜λŠ” μ‘°μ΄μŠ€ν‹± μž…λ ₯에 λŒ€ν•œ 맀핑듀을 미리 ν• λ‹Ήν•˜κ³  Tag 둜 뢈렀 올 수 μžˆλ„λ‘ ν•˜κ³  μž‡λ”°. InpuTag 객체 μ ‘κ·ΌμœΌλ‘œ Move 둜 λ˜μ–΄μžˆλŠ” 것을 λ³Ό 수 μžˆλŠ”λ°(InputTag.Move). 사전에 이동과 κ΄€λ ¨λœ ν‚€λ³΄λ“œλ₯Ό 미리 ν• λ‹Ήν•˜κ³  μœ μ €κ°€ Tag와 κ΄€λ ¨λœ μž…λ ₯을 λ°›μœΌλ©΄ Input Action 을 μ‹€ν–‰λ˜λ„λ‘ ν•˜κ³  μžˆμŒμ„ λ³Ό 수 μžˆλ‹€.
  • Input Action: μœ μ €κ°€ Input Tag κ΄€λ ¨λœ ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ 미리 μ •μ˜ν•œ Action을 μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•΄μ£Όκ³  μžˆλ‹€. Action은 λŒ€ν‘œμ μœΌλ‘œ 캐릭터 이동, ν™”λ©΄ 이동, 점프, μžλ™ 이동, ν™€λ“œ μ›¨ν°νŒŒμ΄μ–΄ 등이 μžˆλ‹€.
  • 캑처본과 Lyraμ—μ„œ λ‹€μ–‘ν•œ Actions λ§Œλ“€μ–΄μ Έ μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€.

Unreal Engine 4 Input μ„€μ •ν•˜κΈ°

  • UE4 μ—μ„œλŠ” Project Settings μ—μ„œ Engine - Input ν•­λͺ©μ—μ„œ μ„€μ •ν•  수 μžˆμ—ˆλ‹€.
  • 캑처본과 같이 Action Mappings μ•‘μ…˜μ„ Forward λΌλŠ” μ „μ§„ν•˜λŠ” λ™μž‘μ— ν‚€λ³΄λ“œ w λ˜λŠ” 마우슀 쒌클릭으둜 이동할 수 있게 맀핑할 수 μžˆλ‹€.
  • UE5 μ—μ„œλŠ” Input 은 Deprecated λ˜μ—ˆμœΌ Enhanced Input μ„€μ •ν•˜λŠ” κ²ƒμ„κΆŒμž₯ν•˜κ³  μžˆλ‹€.

Enhanced Input μ„€μ •ν•˜κΈ°

Unreal Engine 의 Input κΈ°λŠ₯을 ν–₯μƒλœ Input κΈ°λŠ₯이닀.

λ§Œλ“œλŠ” 방법은 Content Drawer νƒμƒ‰κΈ°μ—μ„œ λ¨Όμ € All > Content > Input > Actions 으둜 μ΄λ™ν•œλ‹€.

  • +ADD ν΄λ¦­ν•˜μ—¬ Input > Input Action 에셋을 μΆ”κ°€ν•˜λ„λ‘ ν•œλ‹€.
  • 이름은 "IA_Heal" 으둜 지어주도둝 ν•˜μ˜€λ‹€.
  • ν•΄λ‹Ή 에셋을 더블클릭
  • ν•΄λ‹Ή Input 에셋은 νŠΉμ • 행동을 진행할 λ•Œ λ°˜ν™˜λ˜μ–΄μ•Ό ν•˜λŠ” 것을 μ •ν•  수 μžˆλ‹€.
  • λ°˜ν™˜ν•  수 μžˆλŠ” ν•­λͺ© μ—¬λŸ¬κ°œ μ˜΅μ…˜μ„ μ„€μ •ν•  수 μžˆλ‹€. 많이 μ‚¬μš©ν•˜λŠ” Value Type λΆ€ν„° 섀정을 μ§„ν–‰ν•˜λ„λ‘ ν•œλ‹€.
  • Triggers, Modifiers, Advanced λŠ” μœ„μ— μžˆλŠ” Value Type 쑰건을 κ±Έ 수 μžˆλ‹€.
    예λ₯Ό λ“€λ©΄ λ²„νŠΌμ„ 살짝뗀닀 > λ¬΄μ‹œν•œλ‹€ λΌλŠ” κΈ°λŠ₯이 ν•„μš”ν•  λ•Œ, Modefiers λ°°μ—΄ 생성 ν›„ DeadZone, 0.2, 1.0 μ„€μ •ν•˜λ©΄ 0.2~1.0 float νƒ€μž…λ§Œ 받을 수 μžˆλ‹€.

Enhanced Input, Value Type

ν•΄λ‹Ή 객체 μ˜΅μ…˜μ„ 4개 선택 κ°€λŠ₯ν•˜λ‹€.

  • Digital(bool) : true, false 만 μ„€μ •κ°€λŠ₯, 예둜)λ²„νŠΌμ„ λˆ„λ₯΄κ³  μžˆλŠ” μƒνƒœ(Hold)λŠ” True λ°˜ν™˜, λ²„νŠΌμ„ λ—€ μƒνƒœμ΄λ©΄ Falseλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • Axis1D(float) : μ‘°μ΄μŠ€ν‹±μ—μ„œ μŠ€ν‹±μ„ μ•ž λ’€λ‘œ ν–‰λ™μ‹œ float νƒ€μž…μ΄ λ°˜ν™˜ν•˜κ²Œ ν•œλ‹€. 주둜 가속도 μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.
  • Axis2D(Vector2D): μ‘°μ΄μŠ€ν‹±μ—μ„œ μŠ€ν‹±μ„ μ•ž, λ’€, μ˜† 행동 μ‹œ vector2D νƒ€μž… λ°˜ν™˜ν•œλ‹€. X, Y 좕을 λ°˜ν™˜λ°›κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.
  • Axis3D(Vector): μ‘°μ΄μŠ€ν‹±μ—μ„œ μŠ€ν‹±μ„ μ•ž, λ’€, μ˜† 행동 μ‹œ vector νƒ€μž…μœΌλ‘œ λ°˜ν™˜ν•œλ‹€. X, Y, Z 좕을 λ°˜ν™˜λ°›κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.

Enhanced Input, Context μ„€μ •ν•˜κΈ°

  • Content Drawer νƒμƒ‰κΈ°μ˜ All > Content > Input > Mappings ν΄λ”λ‘œ μ΄λ™ν•œλ‹€.
  • +ADD 둜 μ‚΄νŽ΄λ³΄λ©΄ Input > Input Mapping Context μΆ”κ°€ν•  수 μžˆλ‹€.
  • μ—¬κΈ°μ—μ„œλŠ” μƒˆλ‘œ μΆ”κ°€λ³΄λ‹€λŠ” νƒμƒ‰ν•˜λŠ” μš©λ„λ‘œ 미리 λ§Œλ“€μ–΄μ§„ IMC_Default λ₯Ό μ‚΄νŽ΄λ³΄λ„λ‘ ν•œλ‹€.

Enhanced Input, IMC_Default νƒμƒ‰ν•˜κΈ°

ν•΄λ‹Ή IMC_Default λ₯Ό 더블 ν΄λ¦­ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ •μ˜λœ λͺ¨μŠ΅μ„ λ³Ό 수 μžˆλ‹€.
μ‹€μ œ IMC λ₯Ό λ§Œλ“€λ•Œ μ’…λ₯˜λ³„λ‘œ λ§Œλ“€κ²Œ λ˜λŠ”λ°, 본인은 IMC_Main Menu, IMC_Store, IMC_ESC 각각 λ‚˜λˆ μ„œ λ§€ν•‘ν•˜κ³  ν•„μš”ν•  λ•Œλ§Œ λΆˆλ €μ˜¨λ‹€.

  • Input Mapping Context κ°€μž₯ 큰 νŠΉμ§•μœΌλ‘œ Input 에셋을 μ„€μ •ν•˜κ³  μ‹€μ œ ν‚€λ₯Ό ν• λ‹Ήν•˜λŠ” λͺ¨μŠ΅μ„ λ³Ό 수 μžˆλ‹€.

Enhanced Input, μ΄λ™ν•˜λŠ” IA_Move μ‚΄νŽ΄λ³΄κΈ°

IMC_Default 에 μ‚΄νŽ΄λ³΄λ©΄ IA_Move κ΅¬ν˜„λœ λͺ¨μŠ΅μ„ λ³Ό 수 μžˆλ‹€.
ν•΄λ‹Ή 캐릭터 이동에 λŒ€ν•œ λ™μž‘μž„μ„ 확인할 수 μžˆλŠ”λ°. Modifiers λ°˜ν™˜ 값을 λ³€κ²½ν•΄μ„œ κ΅¬ν˜„ν•˜κ³  μžˆλ‹€.

Modifiers μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜μ–΄μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄κΈ° μ „, 캐릭터 μ΄λ™ν•˜λŠ”λ° X, Y좕이 μ–΄λ–»κ²Œ 이루어져야 ν•˜λŠ”μ§€ μ•Œμ•„λ³΄λ„λ‘ ν•œλ‹€.

y
β”‚
β”‚
└─── x
0

캐릭터 이동 μ‹œ λ°˜ν™˜λ˜μ–΄μ•Ό ν•˜λŠ” X, Y 좕은?

  • 캐릭터 μ „λ©΄ 이동은 W λ₯Ό λˆ„λ₯Ό 경우 0, 1 λ°˜ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό μ΄λ™ν•œλ‹€.
  • 캐릭터 μ „λ©΄ 이동은 A λ₯Ό λˆ„λ₯Ό 경우 -1, 0 λ°˜ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό μ΄λ™ν•œλ‹€.
  • 캐릭터 μ „λ©΄ 이동은 S λ₯Ό λˆ„λ₯Ό 경우 0, -1 λ°˜ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό μ΄λ™ν•œλ‹€.
  • 캐릭터 μ „λ©΄ 이동은 D λ₯Ό λˆ„λ₯Ό 경우 1, 0 λ°˜ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό μ΄λ™ν•œλ‹€.

이제 언리얼 μ—”μ§„μ—μ„œ μ–΄λ–»κ²Œ Modifiers λ₯Ό μ„€μ •ν•˜μ˜€λŠ”μ§€ μ‚΄νŽ΄λ³΄λ„λ‘ ν•œλ‹€.

W ν‚€ μ „λ©΄ 이동

  • IA_Move λŠ” 기본적으둜 1, 0 좕을 λ°˜ν™˜ν•œλ‹€. (ZμΆ• λ¬΄μ‹œ)
  • Swizzle Input Axis Values: Order > YXZ μΆ•μœΌλ‘œ λ³€κ²½ν•œ 것을 λ³Ό 수 μžˆλ‹€. 이것은 X,Y좕을 λ°˜μ „ν•˜μ—¬ 0, 1 μΆ•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

A ν‚€ 쒌츑 이동

  • IA_Move λŠ” 기본적으둜 1, 0 좕을 λ°˜ν™˜ν•œλ‹€. (ZμΆ• λ¬΄μ‹œ)
  • Negate: X, Y, Z 좕을 음수둜 λ°˜ν™˜ν•˜μ—¬ -1, 0 μΆ•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

S ν‚€ λ’€λ‘œ 이동

  • IA_Move λŠ” 기본적으둜 1, 0 좕을 λ°˜ν™˜ν•œλ‹€. (ZμΆ• λ¬΄μ‹œ)
  • Negate: X, Y, Z 좕을 음수둜 λ°˜ν™˜ν•˜μ—¬ -1, 0 μΆ•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.
  • Swizzle Input Axis Values: Order > YXZ μΆ•μœΌλ‘œ λ³€κ²½ν•œ 것을 λ³Ό 수 μžˆλ‹€. 이것은 X, Y좕을 λ°˜μ „ν•˜μ—¬ 0, -1 μΆ•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

D ν‚€ 우츑 이동

  • IA_Move λŠ” 기본적으둜 1, 0 좕을 λ°˜ν™˜ν•œλ‹€. (ZμΆ• λ¬΄μ‹œ)

이제 IA_Move μ‚¬μš©ν•œ 경우 μ–΄λ–»κ²Œ 값을 λ°˜ν™˜ν•˜λŠ”μ§€ 확인할 수 μžˆλ‹€. 그리고 캐릭터 이동 μ²˜λ¦¬ν•˜λŠ” μ½”λ“œλ„ ν•„μš”ν•˜λ‹ˆ μƒˆλ‘œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” 상황이 생길 수 μžˆλ‹€.

Lyraμ—μ„œλŠ” C++ 둜 이미 μž‘μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ— λ§Œμ•½ κ°œλ°œμžκ°€ 직접 λ§Œλ“€μ–΄μ•Όν•˜λŠ” 상황이라면 Blueprint 둜 ꡬ성을 해보도둝 ν•œλ‹€.

  • ν•΄λ‹Ή Level μ—μ„œ Blueprint μž‘μ„±ν•˜λŠ” 뢀뢄을 μ—΄μ–΄λ³Έλ‹€.
  • Enhanced Action Events ν•­λͺ©μ—μ„œ IA_Move Context λ₯Ό 좔가도둝 ν•œλ‹€.
  • IA_Move 에 λŒ€ν•œ 이벀트 PIN 듀을 λͺ¨λ‘ νŽΌμ³λ³΄λ„λ‘ ν•œλ‹€.
  • IA_Move μ΄λ²€νŠΈκ°€ λ°œμƒν•˜μ—¬ Action Value X, Action Value Y 값을 λ°˜ν™˜ν•  λ•Œ 캐릭터 이동, Pawn Class에 λŒ€ν•œ 처리 및 바인딩을 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.
  • PIN 에 λŒ€ν•œ μ²˜λ¦¬λŠ” ν•˜λ“œμ½”λ”©λ‘œ μ΄λ£¨μ–΄μ§ˆ 수 μžˆμ–΄μ„œ, μ˜ˆμ œλŠ” μ—¬κΈ°μ„œ 마무리 ν•˜λ„λ‘ ν•œλ‹€.

μœ„μ—μ„œ μ–˜κΈ°ν•œ 캐릭터 이동 μ²˜λ¦¬λŠ” Lyra μ—μ„œ Gameplay Tags ν”„λ‘œμ νŠΈ μ„ΈνŒ…μ„ ν•˜μ§€ μ•Šκ³  InputTag νƒœκ·Έ C++둜 λ§Œλ“€μ–΄ 캐릭터 이동에 λŒ€ν•œ 처리 κ΅¬ν˜„λœ 것을 확인할 수 μžˆλŠ”λ°, λ‹€ν˜•μ„±μœΌλ‘œ λ˜μ–΄ μžˆμ–΄μ„œ ꢌμž₯ν•˜λŠ” ν˜•νƒœμ˜ μ½”λ“œμ΄λ‹€.