14.InputSystem使用UI

14.UGUI配合使用


14.1 知识点

InputSystem对UI的支持

新输入系统InputSystem不支持IMGUI(GUI)

注意:这个限制只对编辑器代码有效,不会影响其他部分。
如果当前激活的是InputSystem,则OnGUI中的输入判断相关内容不会被触发。
要让OnGUI中的内容有效,你需要选择Both(两者都启用)或者只激活老输入系统InputManager。

新输入系统支持UGUI

但是,要使用新输入系统的输入模块(Input System UI Input Module)来处理与UGUI相关的输入。

UGUI中的新输入系统输入模块参数相关

Move Repeat Delay

生成初始IMoveHandler之间的初始延迟(秒)。OnMove导航事件,并在移动操作保持激活状态时生成重复的导航事件。

Move Repeat Rate

移动动作保持激活时,生成重复导航事件之间的间隔(秒)。请注意,这是由帧速率限制的;每帧不会有多个移动重复事件,因此,如果帧速率低于重复率,则有效重复率将低于此设置。

XR Tracking Origin

Deselect On Background CLick

默认情况下,当指针被点击并且没有击中任何游戏对象时,当前选择被清除。然而,这可能会妨碍键盘和游戏板导航,因为它们需要关闭当前选定的对象。要防止自动取消选择,请将此属性设置为false。

Pointer Behavior


如何处理将输入送入UI的多个指针

  • Single Mouse Or Pen BUt Multi Touch And Track
    对于未分类为触摸或跟踪输入的所有输入,其行为类似于单个统一指针,对于跟踪和触摸输入,其行为类似于所有指针。例如,如果在鼠标和笔上接收到并发输入,则将两者的输入馈送到同一UI指针实例中。其中一个的位置输入将覆盖另一个的位置。请注意,当从触摸或跟踪设备接收到输入时,鼠标和笔的单个统一指针将被删除,包括在鼠标/笔光标当前悬停在对象上时发送的IPointerExit事件。

  • Single Unified Pointer
    所有指针输入都是统一的,因此只有一个指针。这包括触摸和跟踪输入。例如,这意味着,无论有多少设备将输入输入输入点,只有帧中最后一个这样的输入才会生效并成为当前UI指针的位置。

  • All Pointers As Is
    UI输入模块不会统一任何指针输入。任何设备,包括提供输入指针类型动作的触摸和跟踪设备,都将是其自己的指针(或触摸输入的多个指针)。注意:这可能意味着UI中将有任意数量的指针,并且可能同时指向多个对象。

Actions Asset

包含控制UI的所有操作的输入操作资产。您可以使用以下属性选择资产中的哪些操作对应于哪些UI输入。默认情况下,这将引用名为DefaultInputActions的内置资产,该资产包含用于驱动UI的常见默认操作。如果要设置自己的操作,请创建自定义输入操作资源并在此处分配。在Inspector中将新资源引用指定给此字段时,编辑器会尝试根据常用命名约定自动将操作映射到UI输入。

Point

提供2D屏幕位置的动作。用作指向UI元素的光标,以实现鼠标样式的UI交互。设置为传递操作类型和向量2值类型。

Left Click

映射到用于与UI交互的主光标按钮的操作。设置为传递操作类型和按钮值类型。

Middle Click

映射到用于与UI交互的中间光标按钮的操作。设置为传递操作类型和按钮值类型。

Right Click

映射到用于与UI交互的辅助光标按钮的操作。设置为传递操作类型和按钮值类型。

Scroll Wheel

提供手势输入以允许在UI中滚动的操作。设置为传递操作类型和向量2值类型。

Move

一种操作,提供用于选择当前活动用户界面的二维矢量。这允许游戏板或箭头键样式的UI导航。设置为传递操作类型和向量2值类型。

Submit

与当前选择的UI接触或“单击”的操作。设置为按钮动作类型。

Cancel

退出与当前选定UI的任何交互的操作。设置为按钮动作类型。

Tracked Position

提供一个或多个空间跟踪设备(如XR hand控制器)的3D位置的动作。结合跟踪设备方向,这允许通过指向空间中的UI可选择项进行XR样式的UI交互。设置为传递操作类型和向量3值类型。

Tracked Orientation

传递表示一个或多个空间跟踪设备(如XR hand控制器)旋转的四元数的操作。结合跟踪设备位置,这允许通过指向空间中的UI可选择项进行XR样式的UI交互。设置为传递操作类型和四元数值类型。

VR相关中使用新输入系统注意事项

如果想在VR项目中使用新输入系统配合UGUI使用

需要在Canvas对象上添加Tracked Device Raycaster组件。

多人游戏使用多套UI

  • 如果同一设备上的多人游戏,每个人想要使用自己的一套独立UI
  • 需要将 EventSystem 中的 EventSystem 组件替换为 Multiplayer Event System 组件
  • 注意:需要先把 EventSystem 上的 InputSystemUIInputModule 组件和 EventSystem 组件移除之后再重新添加,否则会移除失败

EventSystem 组件不同,可以在场景中同时激活多个 MultiplayerEventSystem
这样,您可以有多个玩家,每个玩家都有自己的 InputSystemUIInputModuleMultiplayerEventSystem 组件。
每个玩家都可以有自己的一组操作来驱动自己的 UI 实例。
如果您正在使用 PlayerInput 组件,还可以设置 PlayerInput 以自动配置玩家的 InputSystemUIInputModule 以使用玩家的操作。
MultilayerEventSystem 组件的属性与事件系统中的属性相同。
此外,MultiplayerEventSystem 组件还添加了一个 playerRoot 属性,您可以将其设置为一个游戏对象,该游戏对象包含此事件系统应在其层次结构中处理的所有 UI 可选择项。

On-Screen 组件相关

  • On-Screen 组件可以模拟 UI 和用户操作的交互
    1. On-Screen Button:按钮交互
    2. On-Screen Stick:摇杆交互

因为小球之前的输入配置文件设置好了摇杆和跳跃的逻辑和关联的设备,只要在 On-Screen 组件关联设备就行了。
比如 On-Screen Stick 关联手柄摇杆,手柄摇杆能控制小球移动,所以 On-Screen Stick 所在的 image 可以当做摇杆拖拽控制小球移动。
同理,On-Screen Button 关联空格键,空格键能控制小球跳跃,那么点击 On-Screen Button 所在的 UI 按钮小球也能跳跃。


更多内容


14.2 知识点代码

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

public class Lesson14_UGUI配合使用 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 InputSystem对UI的支持
        //1.新输入系统InputSystem不支持IMGUI(GUI)注意:编辑器代码不受影响
        //  如果当前激活的是InputSystem,那么OnGUI中的输入判断相关内容不会被触发
        //  你必须要选择Both或者只激活老输入系统InputManager才能让OnGUI中内容有用

        //2.新输入系统支持UGUI,但是需要使用新输入系统输入模块(Input System UI Input Module)
        #endregion

        #region 知识点二 UGUI中的新输入系统输入模块参数相关

        #endregion

        #region 知识点三 VR相关中使用新输入系统注意事项
        //如果想在VR项目中使用新输入系统配合UGUI使用
        //需要在Canvas对象上添加Tracked Device Raycaster组件
        #endregion

        #region 知识点四 多人游戏使用多套UI
        //如果同一设备上的多人游戏,每个人想要使用自己的一套独立UI
        //需要将EventSystem中的EventSystem组件替换为Multiplayer Event System组件
        //注意:需要先把EventSystem上的的InputSystemUIInputModule组件和EventSystem组件移除之后 再重新添加 否则会移除失败

        //与EventSystem组件不同,可以在场景中同时激活多个MultiplayerEventSystem。
        //这样,您可以有多个玩家,每个玩家都有自己的InputSystemUIInputModule和MultiplayerEventSystem组件
        //每个玩家都可以有自己的一组操作来驱动自己的UI实例。
        //如果您正在使用PlayerInput组件,还可以设置PlayerInput以自动配置玩家的InputSystemUIInputModule以使用玩家的操作
        //MultilayerEventSystem组件的属性与事件系统中的属性相同
        //此外,MultiplayerEventSystem组件还添加了一个playerRoot属性,您可以将其设置为一个游戏对象
        //该游戏对象包含此事件系统应在其层次结构中处理的所有UI可选择项
        #endregion

        #region 知识点五 On-Screen组件相关
        //On-Screen组件可以模拟UI和用户操作的交互
        //1.On-Screen Button:按钮交互
        //2.On-Screen Stick:摇杆交互
        #endregion

        #region 知识点六 更多内容
        //可查看官方文档了解更多新输入系统和UI配合使用的相关内容
        //https://docs.unity3d.com/Packages/com.unity.inputsystem@1.2/manual/UISupport.html
        #endregion
    }
}


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

×

喜欢就点赞,疼爱就打赏