论Unity

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

PlayerInput

InputSystem提供专门用来处理玩家输入的组件通过关联配置输入文件可以不需要编写设备输入的相关逻辑专注于编写输入触发后的逻辑。

如何添加

创建一个Cube点击Add Component搜索Player Input即可添加。

界面信息

在这里插入图片描述

Actions

用于关联输入配置文件输入配置文件可以在Project窗口自主创建然后进行关联。也可以直接点击Create Actions会直接创建一个自带相关设置的输入配置文件。我这里使用的Create Actions
在这里插入图片描述
创建过后会出现这样的文件双击打开。在这里插入图片描述

ActionMaps 行动地图窗口

多个Action的集合

Actions 输入动作窗口

和Inspector窗口里一样只不过在右键出现的菜单中删除Action。

Action Properties

之前介绍过了

All Control Schemes

设置编辑器中显示哪些控制方案需要自己手动添加也可以自定义。
Gamepad手柄
Joystick摇杆
KeyboardMouse键盘鼠标
Touch触屏
XRVR/AR等

All Devices设备选择

筛选设备

Save Asset

保存配置

Auto-Save

自动保存配置

搜索栏

可以搜索对应动作行为
在这里插入图片描述
关联后会出现三个选项

Default Scheme

默认启用哪一种方案键鼠、手柄等。

Auto-Switch

自带切换输入。比如一开始你使用键鼠输入然后插上了手柄则会自动变为手柄输入。

Default Map

默认使用的Action方案。

UI Input Module

UI输入模块。如果你想通过UI来控制则可以创建并关联。

m在这里插入图片描述
在这里插入图片描述

Camera

关联摄像机需要分屏时才需修改。

Behavior

通知游戏对象执行对应逻辑。

SendMessage

在脚本中申明“On加行为名的”的函数无参或者参数类型为Input Value将此脚本挂载在Player Input挂载的对象上当触发对应输入时会通过SendMessage通知执行对应函数。

BroadcastMessage

和Send Message规则基本一致但脚本也可以挂载在子物体上通过BroadcastMessage通知执行对应函数。

Invoke UnityEvent Actions

通过拖拽脚本关联函数指明想要执行的函数逻辑但函数参数类型需要改为Input Action.CallbackContext。

Invoke CSharp Events

通过C#事件监听处理对应逻辑通过获取PlayerInput进行事件监听。
首先需要获取Player Input组件然后获取对应的事件进行委托函数添加输入触发时自动调用函数。
public event Action<InputAction.CallbackContext> onActionTriggered通常来说给这个事件添加委托函数。

三个默认的事件

设备丢失

玩家失去了一个设备例如手柄耗尽电池时
OnDeviceLost(PlayerInput input)

设备注册

当设备丢失重新连接并再次运行时会触发例如重新连接手柄
OnDeviceRegained(PlayerInput input)

控制器切换

切换操作设备时
OnControlsChanged(PlayerInput input)

使用Invoke CSharp Events完成移动跳跃功能。

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

public class NewBehaviourScript1 : MonoBehaviour
{
    public PlayerInput playerInput;
    public Rigidbody rigi;
    Vector3 dir;

    void Start()
    {
        playerInput.onActionTriggered += PlayerInput_onActionTriggered;
    }

    private void PlayerInput_onActionTriggered(InputAction.CallbackContext obj)
    {
        switch (obj.action.name)
        {
            case "Move":
                if(obj.phase == InputActionPhase.Performed)
                {
                    dir = new Vector3(obj.ReadValue<Vector2>().x, 0, obj.ReadValue<Vector2>().y);
                  
                }
                else if (obj.phase == InputActionPhase.Canceled)
                {
                    dir = Vector3.zero;
                }
                break;
            case "Jump":
                rigi.AddForce(Vector3.up * 100);
                break;
        }
    }

    // Update is called once per frame
    void Update()
    {
        rigi.AddForce (dir * 10);

    }
}

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6