17.加载Json配置InputActions

17.综合练习题-补充知识点-通过Json数据加载配置文件


17.1 知识点

分析PlayerInput文件中的输入配置文件

查看Inputaction配置文件,观察json数据结构类

点进去看PlayerInput的action,在点进去看InputActionAsset类 发现有和Json相关的方法


通过Json手动加载输入配置文件

在Resource是下创建一个json文件,复制这节课创建的InputAction文件进去。Cube的Action文件置空。


在代码中手动的加载json 创建出InputActionAsset资源并将解析后的 InputActionAsset 对象赋值给 input 对象的 actions 属性

// 从资源文件夹中加载名为 "PlayerInputTest" 的文本资源,并将其内容作为字符串存储在变量 json 中
string json = Resources.Load<TextAsset>("PlayerInputTest").text;

// 使用 InputActionAsset 类的静态方法 FromJson 解析 json 字符串,返回解析后的 InputActionAsset 对象,并将其存储在变量 asset 中
InputActionAsset asset = InputActionAsset.FromJson(json);

// 将解析后的 InputActionAsset 对象赋值给 input 对象的 actions 属性
input.actions = asset;

// 当有输入动作被触发时执行的回调函数
input.onActionTriggered += (context) =>
{
    // 判断输入动作的触发阶段是否为 Performed(已执行)
    if (context.phase == InputActionPhase.Performed)
    {
        // 根据输入动作的名称进行匹配
        switch (context.action.name)
        {
            case "Move":
                // 如果匹配到 Move 动作,则打印 "移动"
                print("移动");
                break;
            case "Look":
                // 如果匹配到 Look 动作,则打印 "看向"
                print("看向");
                break;
            case "Fire":
                // 如果匹配到 Fire 动作,则打印 "开火"
                print("开火");
                break;
        }
    }
};


17.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class Lesson17_综合练习题_补充知识点_通过Json数据加载配置文件 : MonoBehaviour
{
    public PlayerInput input;

    void Start()
    {
        #region 知识点一 分析PlayerInput文件中的输入配置文件

        #endregion

        #region 知识点二 通过Json手动加载输入配置文件

        // 从资源文件夹中加载名为 "PlayerInputTest" 的文本资源,并将其内容作为字符串存储在变量 json 中
        string json = Resources.Load<TextAsset>("PlayerInputTest").text;

        // 使用 InputActionAsset 类的静态方法 FromJson 解析 json 字符串,返回解析后的 InputActionAsset 对象,并将其存储在变量 asset 中
        InputActionAsset asset = InputActionAsset.FromJson(json);

        // 将解析后的 InputActionAsset 对象赋值给 input 对象的 actions 属性
        input.actions = asset;

        // 当有输入动作被触发时执行的回调函数
        input.onActionTriggered += (context) =>
        {
            // 判断输入动作的触发阶段是否为 Performed(已执行)
            if (context.phase == InputActionPhase.Performed)
            {
                // 根据输入动作的名称进行匹配
                switch (context.action.name)
                {
                    case "Move":
                        // 如果匹配到 Move 动作,则打印 "移动"
                        print("移动");
                        break;
                    case "Look":
                        // 如果匹配到 Look 动作,则打印 "看向"
                        print("看向");
                        break;
                    case "Fire":
                        // 如果匹配到 Fire 动作,则打印 "开火"
                        print("开火");
                        break;
                }
            }
        };

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏