U4S1L15——通过Json数据加载配置文件
本章代码关键字
1 2
| InputActionAsset.FromJson() playerInput.actions.Enable()
|
在PlayerInput
的定义文件内,我们可以发现actions
参数使用的是InputActionAsset
这个类型
1 2
| public InputActionAsset actions
|
进一步探索InputActionAsset
的定义,我们可以发现一个读取Json字符串并解析返回InputActionAsset
的静态方法
1 2 3 4 5 6 7 8 9 10
| public static InputActionAsset FromJson(string json) { if (string.IsNullOrEmpty(json)) throw new ArgumentNullException(nameof(json));
var asset = CreateInstance<InputActionAsset>(); asset.LoadFromJson(json); return asset; }
|
已知输入配置文件本质就是Json文件,通过这个方法,我们就可以通过Json来手动加载输入配置文件
通过Json手动加载输入配置文件
将读取到的Json文件传入InputActionAsset.FromJson()
方法内,将其转换为InputActionAsset
类型,再将其作为PlayerInput
使用的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public PlayerInput input;
void Start() { string json = Resources.Load<TextAsset>("PlayerInputTest").text; InputActionAsset asset = InputActionAsset.FromJson(json);
input.actions = asset;
input.onActionTriggered += (context) => { if (context.phase == InputActionPhase.Performed) { switch (context.action.name) { case "Move": print("移动"); break; case "Look": print("看向"); break; case "Fire": print("开火"); break; } } }; }
|
使用Json文件,我们可以手动改变这个json文件的一些参数,来达成改变键位的目的
在使用json文件转换为InputActionAsset
类型,并将其作为PlayerInput
使用的配置文件后
可能会出现InputActionAsset
对象未激活导致没有输入的情况,这时我们需要手动激活PlayerInput的Actions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| private PlayerInput input;
void Start() { input = GetComponent<PlayerInput>(); input.actions = DataManager.Instance.GetActionAsset(); input.actions.Enable(); input.onActionTriggered += (context) => { if (context.phase == InputActionPhase.Performed ) { switch (context.action.name) { case "Fire": print("开火"); break; case "Jump": print("跳跃"); break; case "Move": print("移动:" + context.ReadValue<Vector2>()); break; } } }; }
|