Unity学习笔记-1-CallbackContext的作用

文章发布时间:

最后更新时间:

页面浏览: 加载中...

作者:白章

前言

在 Unity 中,InputAction.CallbackContextInputAction 事件的参数类型,它用于提供有关当前输入操作的上下文信息。当一个输入动作被触发时,CallbackContext 会传递给事件处理函数,以便你能够获取更多的关于输入的细节。这个上下文信息对于实现复杂的输入逻辑非常有用。

CallbackContext 的作用

CallbackContext 包含了一些与输入相关的重要信息,比如输入的持续时间、输入的强度、输入的值等。通过 CallbackContext,你可以在事件处理函数中根据不同的输入情形来执行特定的逻辑。

主要属性和方法

以下是 CallbackContext 中常用的一些属性和方法:

  1. ReadValue<T>()
    这个方法用于获取输入值的当前状态。例如,如果你监听的是一个按钮的按下状态,ReadValue<bool>() 会返回 truefalse,表示按钮是否被按下。如果你监听的是一个轴输入(比如摇杆的移动),ReadValue<float>() 会返回轴的当前值。

    1
    2
    3
    4
    5
    // 读取按键的状态
    bool isPressed = context.ReadValue<bool>();

    // 读取轴的值(例如,摇杆的值)
    float axisValue = context.ReadValue<float>();
  2. time
    这个属性返回输入操作触发时的时间戳,以秒为单位,表示事件发生的时间。它可以用来检测输入持续了多长时间。

    1
    float inputTime = context.time;
  3. phase
    这个属性返回当前输入的阶段(StartedPerformedCanceled)。你可以用它来判断输入的状态。例如,当输入刚开始时,phase 会是 InputActionPhase.Started,输入完成时,phase 会是 InputActionPhase.Performed

    1
    var inputPhase = context.phase;
  4. control
    这个属性提供了触发输入操作的具体控制项。例如,按钮或轴的具体控件对象。这对于需要处理多个输入源(如多个按键、多个游戏手柄)的情形非常有用。

    1
    var control = context.control;

示例

假设你有一个绑定到 Jump 动作的输入事件,并且想要根据 CallbackContext 中的内容来做一些处理。以下是一个基本的例子,展示了如何使用 CallbackContext

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
30
31
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
public InputAction jumpAction;

private void OnEnable()
{
jumpAction.performed += OnJumpPerformed; // 注册事件
}

private void OnDisable()
{
jumpAction.performed -= OnJumpPerformed; // 取消注册
}

private void OnJumpPerformed(InputAction.CallbackContext context)
{
// 获取输入的状态
bool isJumping = context.ReadValue<bool>();

if (isJumping)
{
Debug.Log("Player jumped!");
}

// 输出事件的时间和阶段
Debug.Log($"Jump performed at {context.time} seconds, phase: {context.phase}");
}
}

总结

InputAction.CallbackContext 为你提供了关于输入操作的详细上下文信息,让你能够基于用户的输入进行精确的控制。通过 ReadValue<T>()timephasecontrol 等属性,你可以灵活地处理输入事件,并根据输入的具体情况执行相应的操作。