Skip to content

Commit af8ad8b

Browse files
committed
Cleanup of rebinding sample
1 parent 40771cb commit af8ad8b

File tree

8 files changed

+156
-70
lines changed

8 files changed

+156
-70
lines changed

Assets/Samples/RebindingUI/InputActionIndicator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace UnityEngine.InputSystem.Samples.RebindUI
1010
/// </summary>
1111
/// <remarks>Error handling have been excluded for simplicity.</remarks>
1212
[RequireComponent(typeof(Image))]
13-
public class RebindUIActionIndicator : MonoBehaviour
13+
public class InputActionIndicator : MonoBehaviour
1414
{
1515
[Tooltip("Reference to the associated action to be visualized.")]
1616
public InputActionReference action;
@@ -27,9 +27,10 @@ public class RebindUIActionIndicator : MonoBehaviour
2727
private double m_RealTimeLastPerformed;
2828
private Image m_Image;
2929

30-
void Start()
30+
void Awake()
3131
{
3232
m_Image = GetComponent<Image>();
33+
Update();
3334
}
3435

3536
private void OnEnable()

Assets/Samples/RebindingUI/RebindUIActionIndicator.prefab renamed to Assets/Samples/RebindingUI/InputActionIndicator.prefab

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ GameObject:
1313
- component: {fileID: 4442569273011091735}
1414
- component: {fileID: 8586258032687207620}
1515
m_Layer: 5
16-
m_Name: RebindUIActionIndicator
16+
m_Name: InputActionIndicator
1717
m_TagString: Untagged
1818
m_Icon: {fileID: 0}
1919
m_NavMeshLayer: 0
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using UnityEngine.Events;
2+
3+
namespace UnityEngine.InputSystem.Samples.RebindUI
4+
{
5+
/// <summary>
6+
/// A simple component that deactivates a target when action is performed.
7+
/// </summary>
8+
public class InvokeUnityEvent : MonoBehaviour
9+
{
10+
[Tooltip("The input action that triggers the Unity event when performed.")]
11+
public InputActionReference action;
12+
13+
[Tooltip("The Unity event to be invoked when action is performed.")]
14+
public UnityEvent onPerformed;
15+
16+
private void OnEnable()
17+
{
18+
// Register callback when component is enabled
19+
if (action != null && action.action != null)
20+
action.action.performed += OnActionPerformed;
21+
}
22+
23+
private void OnDisable()
24+
{
25+
// Unregister callback when component is disabled
26+
if (action != null && action.action != null)
27+
action.action.performed -= OnActionPerformed;
28+
}
29+
30+
private void OnActionPerformed(InputAction.CallbackContext context)
31+
{
32+
onPerformed?.Invoke();
33+
}
34+
}
35+
}

Assets/Samples/RebindingUI/InvokeUnityEvent.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Samples/RebindingUI/RebindUIGameManager.cs

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,34 @@ namespace UnityEngine.InputSystem.Samples.RebindUI
55
/// <summary>
66
/// Simple game manager that manages enabling/disabling in-game and UI actions.
77
/// </summary>
8+
/// <remarks>State transitions happens per frame and hence handles throttling.</remarks>
89
public class RebindUIGameManager : MonoBehaviour
910
{
11+
[Tooltip("The in-game menu object to be activated and deactivated when menu is toggled (Required).")]
1012
public GameObject menu;
13+
14+
[Tooltip("The gameplay actions to be disabled when exiting game mode and enabled when entering game mode (Required).")]
1115
public InputActionAsset gameplayActions;
12-
public InputActionReference menuAction;
13-
public InputActionReference exitMenuAction;
14-
16+
17+
[Tooltip("The input action to be used to toggle menu (Required).")]
18+
public InputActionReference toggleMenuAction;
19+
20+
/// <summary>
21+
/// Toggles between game state and rebinding menu state.
22+
/// </summary>
23+
public void ToggleMenu()
24+
{
25+
switch (m_CurrentState)
26+
{
27+
case GameState.Playing:
28+
m_NextState = GameState.RebindingMenu;
29+
break;
30+
case GameState.RebindingMenu:
31+
m_NextState = GameState.Playing;
32+
break;
33+
}
34+
}
35+
1536
private enum GameState
1637
{
1738
Initializing,
@@ -20,23 +41,16 @@ private enum GameState
2041
}
2142

2243
private GameState m_CurrentState = GameState.Initializing;
23-
24-
void Start()
25-
{
26-
SetState(GameState.Playing);
27-
28-
// Let menu initially be disabled
29-
menu.SetActive(false);
30-
31-
// Let gameplay actions be initially enabled
32-
gameplayActions.Enable();
33-
}
34-
44+
private GameState m_NextState = GameState.Playing;
45+
3546
private void SetState(GameState newState)
3647
{
3748
// Abort if there is no change to state
3849
if (newState == m_CurrentState)
3950
return;
51+
52+
// Update current state
53+
m_CurrentState = newState;
4054

4155
switch (newState)
4256
{
@@ -46,43 +60,39 @@ private void SetState(GameState newState)
4660
menu.SetActive(false);
4761
break;
4862

49-
// Entering menu: disable in-game actions, hide menu, make sure we have selection
63+
// Entering menu: disable in-game actions, hide menu, make sure we have selection.
64+
// Also make sure or toggle menu action is enabled in case its part of gameplay actions.
5065
case GameState.RebindingMenu:
5166
gameplayActions.Disable();
67+
toggleMenuAction.action.Enable();
5268
menu.SetActive(true);
5369
if (EventSystem.current.currentSelectedGameObject == null)
5470
EventSystem.current.SetSelectedGameObject(EventSystem.current.firstSelectedGameObject);
5571
break;
56-
57-
case GameState.Initializing:
58-
default:
59-
break;
6072
}
61-
62-
// Update current state
63-
m_CurrentState = newState;
73+
74+
Debug.Log(m_CurrentState);
6475
}
6576

66-
private void OnMenu(InputAction.CallbackContext obj)
77+
private void OnToggleMenu(InputAction.CallbackContext obj)
6778
{
68-
SetState(GameState.RebindingMenu);
79+
ToggleMenu();
6980
}
7081

71-
private void OnExitMenu(InputAction.CallbackContext obj)
82+
private void OnEnable()
7283
{
73-
SetState(GameState.Playing);
84+
toggleMenuAction.action.performed += OnToggleMenu;
7485
}
7586

76-
private void OnEnable()
87+
private void OnDisable()
7788
{
78-
menuAction.action.performed += OnMenu;
79-
exitMenuAction.action.performed += OnExitMenu;
89+
toggleMenuAction.action.performed -= OnToggleMenu;
8090
}
8191

82-
private void OnDisable()
92+
private void Update()
8393
{
84-
menuAction.action.performed -= OnMenu;
85-
exitMenuAction.action.performed -= OnExitMenu;
94+
if (m_CurrentState != m_NextState)
95+
SetState(m_NextState);
8696
}
8797
}
8898
}

Assets/Samples/RebindingUI/RebindUISampleActions.inputactions

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,6 @@
4040
"processors": "",
4141
"interactions": "",
4242
"initialStateCheck": false
43-
},
44-
{
45-
"name": "Menu",
46-
"type": "Button",
47-
"id": "e9611426-b2b5-4d32-8f80-0044aa66c3ee",
48-
"expectedControlType": "",
49-
"processors": "",
50-
"interactions": "",
51-
"initialStateCheck": false
5243
}
5344
],
5445
"bindings": [
@@ -183,10 +174,27 @@
183174
"action": "Use",
184175
"isComposite": false,
185176
"isPartOfComposite": false
186-
},
177+
}
178+
]
179+
},
180+
{
181+
"name": "Common",
182+
"id": "2bbff6e4-ede9-4e3a-8f82-d588abe8c348",
183+
"actions": [
184+
{
185+
"name": "Menu",
186+
"type": "Button",
187+
"id": "50dde025-01a5-4349-9e15-df9f730275b1",
188+
"expectedControlType": "",
189+
"processors": "",
190+
"interactions": "",
191+
"initialStateCheck": false
192+
}
193+
],
194+
"bindings": [
187195
{
188196
"name": "",
189-
"id": "a30d4e10-5144-403d-bb4a-31cd1981cac8",
197+
"id": "51a4896f-3b5f-4c33-b1e4-048f093e6ec1",
190198
"path": "<Keyboard>/escape",
191199
"interactions": "",
192200
"processors": "",
@@ -197,7 +205,7 @@
197205
},
198206
{
199207
"name": "",
200-
"id": "1a4b7cba-58ea-424f-8773-ccf95ac70960",
208+
"id": "0b7a5efe-7a20-45db-8406-ccca75733d10",
201209
"path": "<Gamepad>/start",
202210
"interactions": "",
203211
"processors": "",

Assets/Samples/RebindingUI/RebindingUISampleScene.unity

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ GameObject:
273273
m_Component:
274274
- component: {fileID: 51853244}
275275
- component: {fileID: 51853245}
276+
- component: {fileID: 51853246}
276277
m_Layer: 0
277278
m_Name: GameManager
278279
m_TagString: Untagged
@@ -310,10 +311,21 @@ MonoBehaviour:
310311
menu: {fileID: 508436405}
311312
gameplayActions: {fileID: -944628639613478452, guid: 7dead05c54ca85b4681351aafd8bd03a,
312313
type: 3}
313-
menuAction: {fileID: -5192579202481869335, guid: 7dead05c54ca85b4681351aafd8bd03a,
314-
type: 3}
315-
exitMenuAction: {fileID: 273729934076485498, guid: 100b460020a15704692cc0ec34331d8a,
314+
toggleMenuAction: {fileID: -2195523558945053078, guid: 7dead05c54ca85b4681351aafd8bd03a,
316315
type: 3}
316+
--- !u!114 &51853246
317+
MonoBehaviour:
318+
m_ObjectHideFlags: 0
319+
m_CorrespondingSourceObject: {fileID: 0}
320+
m_PrefabInstance: {fileID: 0}
321+
m_PrefabAsset: {fileID: 0}
322+
m_GameObject: {fileID: 51853243}
323+
m_Enabled: 1
324+
m_EditorHideFlags: 0
325+
m_Script: {fileID: 11500000, guid: 5b6c2da2db9374dada6761b5e35121c8, type: 3}
326+
m_Name:
327+
m_EditorClassIdentifier:
328+
actions: {fileID: -944628639613478452, guid: 7dead05c54ca85b4681351aafd8bd03a, type: 3}
317329
--- !u!1001 &67962919
318330
PrefabInstance:
319331
m_ObjectHideFlags: 0
@@ -447,12 +459,12 @@ PrefabInstance:
447459
type: 3}
448460
propertyPath: m_Action
449461
value:
450-
objectReference: {fileID: -5192579202481869335, guid: 7dead05c54ca85b4681351aafd8bd03a,
462+
objectReference: {fileID: -2195523558945053078, guid: 7dead05c54ca85b4681351aafd8bd03a,
451463
type: 3}
452464
- target: {fileID: 6680292650503350826, guid: f25dcd618d3acd64795bf8bb32edb6c9,
453465
type: 3}
454466
propertyPath: m_BindingId
455-
value: 1a4b7cba-58ea-424f-8773-ccf95ac70960
467+
value: 0b7a5efe-7a20-45db-8406-ccca75733d10
456468
objectReference: {fileID: 0}
457469
- target: {fileID: 6680292650503350826, guid: f25dcd618d3acd64795bf8bb32edb6c9,
458470
type: 3}
@@ -473,7 +485,9 @@ PrefabInstance:
473485
- target: {fileID: 6680292650847612335, guid: f25dcd618d3acd64795bf8bb32edb6c9,
474486
type: 3}
475487
propertyPath: m_Text
476-
value: Menu
488+
value: 'Menu
489+
490+
'
477491
objectReference: {fileID: 0}
478492
m_RemovedComponents: []
479493
m_RemovedGameObjects: []
@@ -1594,6 +1608,7 @@ GameObject:
15941608
- component: {fileID: 508436406}
15951609
- component: {fileID: 508436408}
15961610
- component: {fileID: 508436407}
1611+
- component: {fileID: 508436409}
15971612
m_Layer: 5
15981613
m_Name: RebindMenu
15991614
m_TagString: Untagged
@@ -1660,6 +1675,35 @@ CanvasRenderer:
16601675
m_PrefabAsset: {fileID: 0}
16611676
m_GameObject: {fileID: 508436405}
16621677
m_CullTransparentMesh: 0
1678+
--- !u!114 &508436409
1679+
MonoBehaviour:
1680+
m_ObjectHideFlags: 0
1681+
m_CorrespondingSourceObject: {fileID: 0}
1682+
m_PrefabInstance: {fileID: 0}
1683+
m_PrefabAsset: {fileID: 0}
1684+
m_GameObject: {fileID: 508436405}
1685+
m_Enabled: 1
1686+
m_EditorHideFlags: 0
1687+
m_Script: {fileID: 11500000, guid: 83ad383eb7f4143f388de7a2a7e17738, type: 3}
1688+
m_Name:
1689+
m_EditorClassIdentifier:
1690+
action: {fileID: 273729934076485498, guid: 100b460020a15704692cc0ec34331d8a, type: 3}
1691+
onPerformed:
1692+
m_PersistentCalls:
1693+
m_Calls:
1694+
- m_Target: {fileID: 51853245}
1695+
m_TargetAssemblyTypeName: UnityEngine.InputSystem.Samples.RebindUI.RebindUIGameManager,
1696+
Unity.InputSystem.RebindingUI
1697+
m_MethodName: ToggleMenu
1698+
m_Mode: 1
1699+
m_Arguments:
1700+
m_ObjectArgument: {fileID: 0}
1701+
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
1702+
m_IntArgument: 0
1703+
m_FloatArgument: 0
1704+
m_StringArgument:
1705+
m_BoolArgument: 0
1706+
m_CallState: 2
16631707
--- !u!224 &510051365 stripped
16641708
RectTransform:
16651709
m_CorrespondingSourceObject: {fileID: 1777307397533242038, guid: 0648a5c163cef41038b804a34b4b80e7,
@@ -2929,7 +2973,6 @@ GameObject:
29292973
- component: {fileID: 861395294}
29302974
- component: {fileID: 861395293}
29312975
- component: {fileID: 861395292}
2932-
- component: {fileID: 861395296}
29332976
m_Layer: 5
29342977
m_Name: Canvas
29352978
m_TagString: Untagged
@@ -3025,19 +3068,6 @@ RectTransform:
30253068
m_AnchoredPosition: {x: 0, y: 0}
30263069
m_SizeDelta: {x: 0, y: 0}
30273070
m_Pivot: {x: 0, y: 0}
3028-
--- !u!114 &861395296
3029-
MonoBehaviour:
3030-
m_ObjectHideFlags: 0
3031-
m_CorrespondingSourceObject: {fileID: 0}
3032-
m_PrefabInstance: {fileID: 0}
3033-
m_PrefabAsset: {fileID: 0}
3034-
m_GameObject: {fileID: 861395291}
3035-
m_Enabled: 1
3036-
m_EditorHideFlags: 0
3037-
m_Script: {fileID: 11500000, guid: 5b6c2da2db9374dada6761b5e35121c8, type: 3}
3038-
m_Name:
3039-
m_EditorClassIdentifier:
3040-
actions: {fileID: -944628639613478452, guid: 7dead05c54ca85b4681351aafd8bd03a, type: 3}
30413071
--- !u!1 &862809802
30423072
GameObject:
30433073
m_ObjectHideFlags: 0
@@ -4222,12 +4252,12 @@ PrefabInstance:
42224252
type: 3}
42234253
propertyPath: m_Action
42244254
value:
4225-
objectReference: {fileID: -5192579202481869335, guid: 7dead05c54ca85b4681351aafd8bd03a,
4255+
objectReference: {fileID: -2195523558945053078, guid: 7dead05c54ca85b4681351aafd8bd03a,
42264256
type: 3}
42274257
- target: {fileID: 6680292650503350826, guid: f25dcd618d3acd64795bf8bb32edb6c9,
42284258
type: 3}
42294259
propertyPath: m_BindingId
4230-
value: a30d4e10-5144-403d-bb4a-31cd1981cac8
4260+
value: 51a4896f-3b5f-4c33-b1e4-048f093e6ec1
42314261
objectReference: {fileID: 0}
42324262
- target: {fileID: 6680292650503350826, guid: f25dcd618d3acd64795bf8bb32edb6c9,
42334263
type: 3}

0 commit comments

Comments
 (0)