Skip to content

Commit 90f0b53

Browse files
committed
Simplified look sensitivity code
1 parent 76649d6 commit 90f0b53

File tree

5 files changed

+172
-162
lines changed

5 files changed

+172
-162
lines changed

Assets/Samples/RebindingUI/RebindActionParameterUI.cs

Lines changed: 64 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
namespace UnityEngine.InputSystem.Samples.RebindUI
88
{
9-
[RequireComponent(typeof(Slider))]
109
public class RebindActionParameterUI : MonoBehaviour
1110
{
1211
/// <summary>
@@ -31,14 +30,37 @@ public string bindingId
3130
}
3231

3332
/// <summary>
34-
/// Parameter name of the parameter to be configured.
33+
/// The preference key to be used for persistence.
3534
/// </summary>
36-
/// <remarks>This corresponds to a binding processor parameter name when <see cref="bindingId"/> is not
37-
/// null nor empty and otherwise corresponds to an action processor parameter.</remarks>
38-
public string parameterName
35+
public string mPreferenceKey
3936
{
40-
get => m_ParameterName;
41-
set => m_ParameterName = value;
37+
get => m_PreferenceKey;
38+
set => m_PreferenceKey = value;
39+
}
40+
41+
/// <summary>
42+
/// The associated slider UI component instance.
43+
/// </summary>
44+
public Slider slider
45+
{
46+
get => m_Slider;
47+
set
48+
{
49+
if (m_Slider != null)
50+
m_Slider.onValueChanged.RemoveListener(SetParameterValue);
51+
m_Slider = value;
52+
if (value != null)
53+
value.onValueChanged.AddListener(SetParameterValue);
54+
}
55+
}
56+
57+
/// <summary>
58+
/// The default value to apply when reset or no preference exist.
59+
/// </summary>
60+
public float defaultValue
61+
{
62+
get => m_DefaultValue;
63+
set => m_DefaultValue = value;
4264
}
4365

4466
[Tooltip("Reference to action that holds the parameter to be configurable via this behaviour.")]
@@ -49,68 +71,67 @@ public string parameterName
4971
[SerializeField]
5072
private string m_BindingId;
5173

52-
[Tooltip("The parameter name to be configured via this behaviour.")]
74+
[Tooltip("The player preference key to be used for persistence.")]
5375
[SerializeField]
54-
private string m_ParameterName;
76+
private string m_PreferenceKey;
5577

78+
[Tooltip("The default value to be be used when no preference exists or when resetting")]
79+
[SerializeField]
80+
private float m_DefaultValue;
81+
82+
[Tooltip("The associated slider UI component used to change the value.")]
83+
[SerializeField]
5684
private Slider m_Slider;
5785

86+
private float m_Value;
87+
5888
public void ResetToDefault()
5989
{
60-
if (m_Action != null && m_Action.action != null)
61-
m_Action.action.RemoveAllBindingOverrides();
62-
63-
if (TryGetParameterValue(out var value))
64-
UpdateDisplayValue(value);
90+
PlayerPrefs.SetFloat(m_PreferenceKey, m_DefaultValue);
91+
SetParameterValue(m_DefaultValue);
6592
}
6693

6794
private void Awake()
6895
{
69-
m_Slider = GetComponent<Slider>();
96+
if (m_Slider == null)
97+
m_Slider = GetComponent<Slider>();
7098
}
7199

72100
private void OnEnable()
73101
{
74-
if (TryGetParameterValue(out var value))
75-
UpdateDisplayValue(value);
76-
m_Slider.onValueChanged.AddListener(SetParameterValue);
77-
}
102+
if (!string.IsNullOrEmpty(m_PreferenceKey))
103+
SetParameterValue(PlayerPrefs.GetFloat(m_PreferenceKey, m_DefaultValue));
78104

79-
private void OnDisable()
80-
{
81-
m_Slider.onValueChanged.RemoveListener(SetParameterValue);
105+
if (m_Slider != null)
106+
m_Slider.onValueChanged.AddListener(SetParameterValue);
82107
}
83108

84-
private bool TryGetParameterValue(out float value)
109+
private void OnDisable()
85110
{
86-
if (m_Action != null && !string.IsNullOrEmpty(m_ParameterName))
87-
{
88-
//var k = m_Action.action.GetParameterValue((ScaleVector2Processor p) => p.x);
89-
90-
var v = m_Action.action.GetParameterValue(m_ParameterName);
91-
if (v.HasValue)
92-
{
93-
var val = v.Value;
94-
if (val.type == TypeCode.Single)
95-
{
96-
value = val.ToSingle();
97-
return true;
98-
}
99-
}
100-
}
111+
if (m_Slider != null)
112+
m_Slider.onValueChanged.RemoveListener(SetParameterValue);
101113

102-
value = default;
103-
return false;
114+
if (!string.IsNullOrEmpty(m_PreferenceKey))
115+
PlayerPrefs.SetFloat(m_PreferenceKey, m_Value);
104116
}
105117

106118
private void SetParameterValue(float value)
107119
{
108120
// Apply parameter value as a parametric override
109-
if (m_Action != null && !string.IsNullOrEmpty(m_ParameterName))
121+
if (m_Action != null && m_Action.action != null)
110122
{
111-
m_Action.action.ApplyParameterOverride(m_ParameterName, value);
123+
var action = m_Action.action;
124+
int bindingIndex = BindingUI.FindBindingById(action, m_BindingId);
125+
var bindingMask = bindingIndex >= 0 ? action.bindings[bindingIndex] : default;
126+
127+
// We apply parameter override. This directly affects matching processors and interactions
128+
// if they have matching parameters.
129+
action.ApplyParameterOverride("scaleVector2:x", value, bindingMask);
130+
action.ApplyParameterOverride("scaleVector2:y", value, bindingMask);
112131
}
113-
132+
133+
m_Value = value;
134+
114135
UpdateDisplayValue(value);
115136
}
116137

Assets/Samples/RebindingUI/RebindActionParameterUIEditor.cs

Lines changed: 31 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,22 @@
55
using UnityEditor;
66
using UnityEngine;
77
using UnityEngine.InputSystem.Utilities;
8+
using UnityEngine.UI;
89

910
namespace UnityEngine.InputSystem.Samples.RebindUI
1011
{
12+
/// <summary>
13+
/// Allows persisting a parameter override associated with a binding.
14+
/// </summary>
1115
[CustomEditor(typeof(RebindActionParameterUI))]
1216
public class RebindActionParameterUIEditor : UnityEditor.Editor
1317
{
1418
protected void OnEnable()
1519
{
1620
m_Binding = new BindingUI(serializedObject);
17-
m_ParameterNameProperty = serializedObject.FindProperty("m_ParameterName");
21+
m_DefaultValueProperty = serializedObject.FindProperty("m_DefaultValue");
22+
m_PreferenceKeyProperty = serializedObject.FindProperty("m_PreferenceKey");
23+
m_SliderProperty = serializedObject.FindProperty("m_Slider");
1824

1925
Refresh();
2026
}
@@ -23,97 +29,39 @@ public override void OnInspectorGUI()
2329
{
2430
EditorGUI.BeginChangeCheck();
2531

26-
//EditorGUILayout.PropertyField(m_ActionProperty);
27-
2832
// Binding section.
2933
m_Binding.Draw();
3034

31-
// Parameter section.
32-
var newSelectedParameter = EditorGUILayout.Popup(m_ParameterLabel, m_SelectedParameterOption, m_Parameters);
33-
if (newSelectedParameter != m_SelectedParameterOption)
35+
// UI section
36+
EditorGUILayout.LabelField("UI");
37+
using (new EditorGUI.IndentLevelScope())
3438
{
35-
m_SelectedParameterOption = newSelectedParameter;
39+
EditorGUILayout.ObjectField(m_SliderProperty);
3640
}
3741

38-
if (EditorGUI.EndChangeCheck())
42+
// Parameter section.
43+
EditorGUILayout.LabelField("Parameter");
44+
using (new EditorGUI.IndentLevelScope())
3945
{
40-
serializedObject.ApplyModifiedProperties();
41-
Refresh();
42-
}
43-
}
44-
45-
private void Refresh()
46-
{
47-
if (!m_Binding.Refresh())
48-
return;
49-
50-
RefreshItems();
51-
}
52-
53-
private void RefreshItems()
54-
{
55-
var action = m_Binding.action;
46+
var key = EditorGUILayout.TextField("Preference Key", m_PreferenceKeyProperty.stringValue);
47+
if (key != m_PreferenceKeyProperty.stringValue)
48+
m_PreferenceKeyProperty.stringValue = key;
5649

57-
var parameters = new List<GUIContent>();
58-
var parameterValues = new List<ParameterValue>();
50+
var defaultValue = EditorGUILayout.FloatField("Default Value", m_DefaultValueProperty.floatValue);
51+
if (!Mathf.Approximately(defaultValue, m_DefaultValueProperty.floatValue))
52+
m_DefaultValueProperty.floatValue = defaultValue;
5953

60-
// Add action processors
61-
var actionItems = NameAndParameters.ParseMultiple(action.processors);
62-
foreach (var item in actionItems)
63-
{
64-
// TODO FIX
65-
//parameters.Add(new GUIContent(item.name + " (Action)"));
66-
//parameterValues.Add(item);
67-
}
68-
69-
// Add binding processors
70-
var bindings = action.bindings;
71-
for (var i = 0; i < bindings.Count; i++)
72-
{
73-
var bindingItems = NameAndParameters.ParseMultiple(bindings[i].processors);
74-
foreach (var item in bindingItems)
54+
if (EditorGUI.EndChangeCheck())
7555
{
76-
//parameters.Add(new GUIContent(item.name + " (Binding)"));
77-
//parameterValues.Add(item.name);
78-
79-
// Only add parameters from the active binding
80-
if (m_Binding.bindingIndex != i)
81-
continue;
82-
83-
var uniformParameterType = true;
84-
var previousType = TypeCode.Empty;
85-
var processorParameters = item.parameters;
86-
foreach (var parameter in processorParameters)
87-
{
88-
if (uniformParameterType && parameter.type != previousType && previousType != TypeCode.Empty)
89-
uniformParameterType = false;
90-
previousType = parameter.type;
91-
92-
// And option for individual parameter
93-
var processorParameterName = item.name + "." + parameter.name;
94-
parameters.Add(new GUIContent(processorParameterName));
95-
parameterValues.Add(new ParameterValue
96-
{
97-
bindingId = m_Binding.bindingId,
98-
name = parameter.name,
99-
});
100-
}
101-
102-
// Add parameter option for all/uniform parameter modification if all parameters are of
103-
// the same type.
104-
if (!uniformParameterType)
105-
continue;
106-
parameters.Add(new GUIContent(item.name + " (Uniform)"));
107-
parameterValues.Add(new ParameterValue
108-
{
109-
bindingId = m_Binding.bindingId,
110-
name = null
111-
});
56+
serializedObject.ApplyModifiedProperties();
57+
Refresh();
11258
}
11359
}
60+
}
11461

115-
m_Parameters = parameters.ToArray();
116-
m_ParameterValues = parameterValues.ToArray();
62+
private void Refresh()
63+
{
64+
m_Binding.Refresh();
11765
}
11866

11967
private struct ParameterValue
@@ -122,12 +70,11 @@ private struct ParameterValue
12270
public string name;
12371
}
12472

125-
private SerializedProperty m_ParameterNameProperty;
73+
private SerializedProperty m_PreferenceKeyProperty;
74+
private SerializedProperty m_DefaultValueProperty;
75+
private SerializedProperty m_SliderProperty;
76+
12677
private BindingUI m_Binding;
127-
private GUIContent[] m_Parameters;
128-
private ParameterValue[] m_ParameterValues;
129-
private int m_SelectedParameterOption;
130-
private readonly GUIContent m_ParameterLabel = new GUIContent("Processor Parameter");
13178
}
13279
}
13380

Assets/Samples/RebindingUI/RebindSaveLoad.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void Load()
2929
if (!IsValidConfiguration())
3030
return;
3131

32-
var rebinds = PlayerPrefs.GetString("rebinds");
32+
var rebinds = PlayerPrefs.GetString(playerPreferenceKey);
3333
if (string.IsNullOrEmpty(rebinds))
3434
return; // OK, we may not have saved any binding overrides yet.
3535

Assets/Samples/RebindingUI/RebindUISampleActions.inputactions

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115
"id": "d540edf6-bfaa-4b08-b8d5-925398a2debe",
116116
"path": "<Gamepad>/rightStick",
117117
"interactions": "",
118-
"processors": "ScaleVector2",
118+
"processors": "",
119119
"groups": "Gamepad",
120120
"action": "Look",
121121
"isComposite": false,
@@ -126,7 +126,7 @@
126126
"id": "7c03e976-d9da-4d96-9bcd-622e98b0f3c3",
127127
"path": "<Mouse>/delta",
128128
"interactions": "",
129-
"processors": "ScaleVector2(x=1.5,y=1.5),ScaleVector2",
129+
"processors": "ScaleVector2",
130130
"groups": "Keyboard",
131131
"action": "Look",
132132
"isComposite": false,

0 commit comments

Comments
 (0)