Thanks for the update @Rene-Damm !
I saw a copy/paste mistake in
PlayerInputEditor, OnInspectorGUI(), l.105
Replaced :
m_SelectedDefaultControlScheme = selected;
With :
m_SelectedDefaultActionMap = selected;
Following your conventions, i added a SchemeFromControl functionality :
PlayerInput.cs, l.523
Added :
[SerializeField] internal bool m_SchemeFromControl;
PlayerInput.cs, AssignUserAndDevices(), l.761
Added :
else if (m_SchemeFromControl)
{
InputControlScheme? controlScheme = InputControlScheme.FindControlSchemeForControl(s_InitPairWithDevices[0], m_Actions.controlSchemes);
if (controlScheme.HasValue)
TryToActivateControlScheme(controlScheme.Value);
}
PlayerInputEditor.cs, l.521
Added :
[NonSerialized] private readonly GUIContent m_SchemeFromControlText = EditorGUIUtility.TrTextContent("Get Control Scheme From Control");
PlayerInputEditor, l.529
Added :
[NonSerialized] private bool m_SchemeFromControl;
PlayerInputEditor, OnInspectorGUI(), l.65
Replaced :
// Default control scheme picker.
var selected = EditorGUILayout.Popup(m_DefaultControlSchemeText, m_SelectedDefaultControlScheme,
m_ControlSchemeOptions);
if (selected != m_SelectedDefaultControlScheme)
{
var defaultControlSchemeProperty = serializedObject.FindProperty("m_DefaultControlScheme");
if (selected == 0)
{
defaultControlSchemeProperty.stringValue = null;
}
else
{
defaultControlSchemeProperty.stringValue =
m_ControlSchemeOptions[selected].text;
}
m_SelectedDefaultControlScheme = selected;
}
With :
bool toggled = EditorGUILayout.Toggle(m_SchemeFromControlText, m_SchemeFromControl);
if (toggled != m_SchemeFromControl)
{
SerializedProperty schemeFromControlProperty = serializedObject.FindProperty("m_SchemeFromControl");
schemeFromControlProperty.boolValue = m_SchemeFromControl = toggled;
}
if (!toggled)
{
// Default control scheme picker.
var selected = EditorGUILayout.Popup(m_DefaultControlSchemeText, m_SelectedDefaultControlScheme,
m_ControlSchemeOptions);
if (selected != m_SelectedDefaultControlScheme)
{
var defaultControlSchemeProperty = serializedObject.FindProperty("m_DefaultControlScheme");
if (selected == 0)
{
defaultControlSchemeProperty.stringValue = null;
}
else
{
defaultControlSchemeProperty.stringValue =
m_ControlSchemeOptions[selected].text;
}
m_SelectedDefaultControlScheme = selected;
}
}
It works fine except I have to disconnect a device to get messages from inputs. Do you have a clue ?
EDIT : I don’t have messages from the device used to join. Using Enter key to join for the Keyboard/Mouse control scheme, I have messages from the mouse. Disconnect any device (even a Gamepad) make it works as intended.
EDIT2 : To make it works with Use Reference set to true, I added the following :
PlayerInput.cs, OnEnable(), l.903
Added :
m_Actions = Instantiate(m_Actions);