您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
93 行
3.8 KiB
93 行
3.8 KiB
using System.Collections.Generic;
|
|
|
|
namespace UnityEngine.Experimental
|
|
{
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
|
|
public class InputManagerEntry
|
|
{
|
|
public enum Kind { KeyOrButton, Mouse, Axis }
|
|
public enum Axis { X, Y, Third, Fourth, Fifth, Sixth, Seventh, Eigth }
|
|
public enum Joy { All, First, Second }
|
|
|
|
public string name = "";
|
|
public string desc = "";
|
|
public string btnNegative = "";
|
|
public string btnPositive = "";
|
|
public string altBtnNegative = "";
|
|
public string altBtnPositive = "";
|
|
public float gravity = 0.0f;
|
|
public float deadZone = 0.0f;
|
|
public float sensitivity = 0.0f;
|
|
public bool snap = false;
|
|
public bool invert = false;
|
|
public Kind kind = Kind.Axis;
|
|
public Axis axis = Axis.X;
|
|
public Joy joystick = Joy.All;
|
|
}
|
|
|
|
public class InputRegistering
|
|
{
|
|
static bool InputAlreadyRegistered(string name, InputManagerEntry.Kind kind, SerializedProperty spAxes)
|
|
{
|
|
for (var i = 0; i < spAxes.arraySize; ++i)
|
|
{
|
|
var spAxis = spAxes.GetArrayElementAtIndex(i);
|
|
var axisName = spAxis.FindPropertyRelative("m_Name").stringValue;
|
|
var kindValue = spAxis.FindPropertyRelative("type").intValue;
|
|
if (axisName == name && (int)kind == kindValue)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
static void WriteEntry(SerializedProperty spAxes, InputManagerEntry entry)
|
|
{
|
|
if (InputAlreadyRegistered(entry.name, entry.kind, spAxes))
|
|
return;
|
|
|
|
spAxes.InsertArrayElementAtIndex(spAxes.arraySize);
|
|
var spAxis = spAxes.GetArrayElementAtIndex(spAxes.arraySize - 1);
|
|
spAxis.FindPropertyRelative("m_Name").stringValue = entry.name;
|
|
spAxis.FindPropertyRelative("descriptiveName").stringValue = entry.desc;
|
|
spAxis.FindPropertyRelative("negativeButton").stringValue = entry.btnNegative;
|
|
spAxis.FindPropertyRelative("altNegativeButton").stringValue = entry.altBtnNegative;
|
|
spAxis.FindPropertyRelative("positiveButton").stringValue = entry.btnPositive;
|
|
spAxis.FindPropertyRelative("altPositiveButton").stringValue = entry.altBtnPositive;
|
|
spAxis.FindPropertyRelative("gravity").floatValue = entry.gravity;
|
|
spAxis.FindPropertyRelative("dead").floatValue = entry.deadZone;
|
|
spAxis.FindPropertyRelative("sensitivity").floatValue = entry.sensitivity;
|
|
spAxis.FindPropertyRelative("snap").boolValue = entry.snap;
|
|
spAxis.FindPropertyRelative("invert").boolValue = entry.invert;
|
|
spAxis.FindPropertyRelative("type").intValue = (int)entry.kind;
|
|
spAxis.FindPropertyRelative("axis").intValue = (int)entry.axis;
|
|
spAxis.FindPropertyRelative("joyNum").intValue = (int)entry.joystick;
|
|
}
|
|
|
|
public static void RegisterInputs(List<InputManagerEntry> entries)
|
|
{
|
|
// Grab reference to input manager
|
|
var assets = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset");
|
|
// Temporary fix. This happens some time with HDRP init when it's called before asset database is initialized (probably related to package load order).
|
|
if (assets.Length == 0)
|
|
return;
|
|
|
|
var inputManager = assets[0];
|
|
|
|
// Wrap in serialized object
|
|
var soInputManager = new SerializedObject(inputManager);
|
|
var spAxes = soInputManager.FindProperty("m_Axes");
|
|
|
|
foreach (InputManagerEntry entry in entries)
|
|
{
|
|
WriteEntry(spAxes, entry);
|
|
}
|
|
|
|
// Commit
|
|
soInputManager.ApplyModifiedProperties();
|
|
}
|
|
}
|
|
#endif
|
|
}
|