U4S1L12——UGUI中使用

InputSystem对UI的支持

  1. 新输入系统 InputSystem 不支持 IMGUI(GUI),注意: 编辑器代码不受影响
    如果当前激活的是 InputSystem,那么 OnGUI​ 中的输入判断相关内容不会被触发
    你必须要在File ——> Build Setting ——> Player Setting ——> Other ——> Active Input Handling 选择Both
    或者只激活老输入系统 InputManager 才能让 OnGUI​ 中内容有用
  2. 新输入系统支持UGUI,但是需要使用新输入系统输入模块(Input System UI Input Module)

Input System UI Input Module 参数相关

​​image​​

  • Send Pointer Hover To Parent - 是否将指针悬停事件发送给父对象

    如果这个属性为true,那么当指针悬停在一个UI组件上时,
    不仅这个元素会收到 ((20230815156689-lih1h0h “IPointerEnterHandler”))​ 和 ((20230815156691-zf6m9cj “IPointerExitHandler”))​ 的回调(接口提供的方法),它的所有父级对象也会收到这些回调

  • Move Repeat Delay - 生成初始 IMoveHandler​ 之间的初始延迟(秒)

    OnMove 导航事件,并在移动操作保持激活状态时生成重复的导航事件

  • Move Repeat Rate - 移动动作保持激活时,生成重复导航事件之间的间隔(秒)

    请注意,这是由帧速率限制的;每帧不会有多个移动重复事件
    因此,如果帧速率低于重复率,则有效重复率将低于此设置。
    换句话说,就算你将间隔时间填的很小很小,它每帧也最多只执行一次

  • XR Tracking Origin - VR 跟踪原点

  • Deselect On Background CLick - 是否在没有点击到对象时取消选择

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

  • Pointer Behavior - 如何处理将输入送入UI的多个指针

    用于处理多点选择

    image

    • Single Mouse Or Pen But Multi Touch And Track

      对于未分类为触摸或跟踪输入的所有输入,其行为类似于单个统一指针,对于跟踪和触摸输入,其行为类似于所有指针。

      例如,如果在鼠标和笔上接收到并发输入,则将两者的输入馈送到同一UI指针实例中。其中一个的位置输入将覆盖另一个的位置。
      或者说,鼠标和笔始终会统一的输入到同一个指针

      请注意,当从触摸或跟踪设备接收到输入时,鼠标和笔的单个统一指针将被删除,包括在鼠标/笔光标当前悬停在对象上时发送的((20230815156691-zf6m9cj “IPointerExit”))事件。也就是说。触屏设备仍将当作多个指针处理

    • Single Unified Pointer

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

    • All Pointers As Is

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

  • Actions Asset - 包含控制UI的所有操作的输入操作配置资产。

    您可以使用以下属性选择资产中的哪些操作(输入配置文件里的InputAction) 对应于哪些UI输入。

    默认情况下,这将引用名为DefaultInputActions的内置资产,该资产包含用于驱动UI的常见默认操作(其实就是我们在PlayerInput默认创建的输入配置文件)

    如果要设置自己的操作,请创建自定义输入操作资源并在此处分配。
    也就是可以自己创建一个输入配置文件来分配输入操作资源

    在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 组件

image

多人游戏使用多套UI

如果是同一设备上的多人游戏,每个人想要使用自己的一套独立UI,需要将EventSystem中的EventSystem组件替换为Multiplayer Event System组件

image

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

On-Screen组件相关

On-Screen组件可以模拟UI和用户操作的交互

  1. On-Screen Button:按钮交互

    使用该脚本的Button会自动拥有模拟某个按键的逻辑,此时按下挂载该脚本的Button就相当于按下了其设置的键位

    image

    • Control Path:要模拟的按键输入,
      输入会触发什么由输入配置文件与脚本内的监听输入逻辑决定
  2. On-Screen Stick:摇杆交互

    使用该脚本的Image贴图会自动拥有摇杆的逻辑

    image

    • Movement Range:摇杆贴图可移动范围

    • Control Path:要模拟的摇杆输入,
      输入会触发什么由输入配置文件与脚本内的监听输入逻辑决定

    • Behaviour:摇杆行为

      image

      • Relative Position With Static Origin - 静态起点与相对位置

        默认的模式,它会使摇杆的中心点固定在初始位置,手指的移动会相对于中心点来计算摇杆的值,而不是相对于摇杆的边界(该描述来自不靠谱的来源,真实情况存疑,仅供参考)

      • Exact Position With Static Origin
        静态起点与绝对位置

      • Exact Position With Dynamic Origin
        动态起点和绝对位置

    • Use lsolated Input Actions:

      image

      用来解决On-Screen Stick的输入和其他UI输入之间的冲突问题。
      如果不勾选这个选项,那么当拖动摇杆时,摇杆的输入设备会在手指所属的设备(鼠标,触摸,笔等)和控件路径所指定的设备(例如游戏手柄)之间切换,这可能会导致摇杆的移动不稳定。

      如果勾选了这个选项,那么摇杆会使用一套独立的Input Action实例来驱动交互,而不是使用UI定义的Input Action。

      这个选项的缺点是,指针的输入会在摇杆组件和UI使用的Input Action Asset中重复。