71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
![]() |
using System.Collections.Generic;
|
||
|
using Sirenix.OdinInspector;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.InputSystem;
|
||
|
|
||
|
// ReSharper disable once CheckNamespace
|
||
|
namespace BlueWaterProject
|
||
|
{
|
||
|
public class InputKeyManager : Singleton<InputKeyManager>
|
||
|
{
|
||
|
[SerializeField] private InputActionAsset actionAsset;
|
||
|
public Dictionary<string, List<string>> CombatKeyBindings { get; set; } = new();
|
||
|
|
||
|
private void Start()
|
||
|
{
|
||
|
LoadBindings();
|
||
|
}
|
||
|
|
||
|
private void LoadBindings()
|
||
|
{
|
||
|
foreach (var actionMap in actionAsset.actionMaps)
|
||
|
{
|
||
|
switch (actionMap.name)
|
||
|
{
|
||
|
case "Combat":
|
||
|
CombatKeyBindings = LoadActionMapBindings(actionMap);
|
||
|
break;
|
||
|
// 추가 액션 맵에 대해서도 비슷한 패턴으로 처리 가능
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private Dictionary<string, List<string>> LoadActionMapBindings(InputActionMap actionMap)
|
||
|
{
|
||
|
var bindings = new Dictionary<string, List<string>>();
|
||
|
|
||
|
foreach (var action in actionMap.actions)
|
||
|
{
|
||
|
var bindingList = new List<string>();
|
||
|
|
||
|
foreach (var binding in action.bindings)
|
||
|
{
|
||
|
var path = !string.IsNullOrEmpty(binding.overridePath) ? binding.overridePath : binding.path;
|
||
|
bindingList.Add(path);
|
||
|
}
|
||
|
|
||
|
if (bindingList.Count > 0)
|
||
|
{
|
||
|
bindings[action.name] = bindingList;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return bindings;
|
||
|
}
|
||
|
|
||
|
[Button("Dictionary 출력")]
|
||
|
private void PrintBindings()
|
||
|
{
|
||
|
PrintActionMapBindings("Combat", CombatKeyBindings);
|
||
|
}
|
||
|
|
||
|
private void PrintActionMapBindings(string actionMapName, Dictionary<string, List<string>> bindings)
|
||
|
{
|
||
|
Debug.Log($"Action Map: {actionMapName}");
|
||
|
foreach (var entry in bindings)
|
||
|
{
|
||
|
Debug.Log($"Action: {entry.Key}, Bindings: {string.Join(", ", entry.Value)}");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|