Skip to content

NInput组件

在开发过程中,获取物理键盘/鼠标输入是比不可少的,而随着开发者们对输入系统要求的日益增加,经常会有项目在做多平台适配和跨平台移植时对不同的操作逻辑感到烦恼。为此,引擎的输入系统提供了从pc至头显,从键鼠到手柄,手势。对于不同平台,不同设备的输入支持,为开发者们提供了巨大的便捷。

接口名称返回值接口作用
GetKeybool按钮状态
GetKeyDownbool按钮是否被按下
GetKeyUpbool按钮是否被抬起
GetKeyNamestd::string按钮名称
GetMousePositionVector2鼠标位置
GetMouseScreenPositionVector2鼠标屏幕位置
GetMousePositionDeltaVector2鼠标位置偏移值
GetMouseScrollDeltafloat滚轮偏移值
GetMouseButtonbool鼠标按键状态
GetMouseButtonDownbool鼠标按钮按下
GetMouseButtonUpbool鼠标按钮抬起
GetMouseButtonDoubleClickbool鼠标按钮双击
GetTouchDownbool触碰按下
GetTouchMovebool触碰移动
GetTouchUpbool触碰抬起
GetTouchPointerIdsstd::set<int32>&触碰点位置
SendKeyDownEventbool注入按键按下事件
SendKeyUpEventbool注入按键抬起事件
IsHmdConnectedbool头显链接状态
IsEyeTrackConnectedbool眼动链接状态
GetGazeModeEGazeMode注视点模式
IsControllerConnectedbool手柄链接状态
GetControllerKeybool手柄按键状态
GetControllerKeyDownbool手柄按键按下
GetControllerKeyUpbool手柄按键抬起
GetControllerTouchbool手柄触控状态
GetControllerTouchPositionVector2手柄触控点位置
GetHandTrackDataNHandJoint*手势数据
GetHandActivebool手势激活状态
GetJoyStickKeybool摇杆按键状态
GetJoyStickKeyUpbool摇杆按键抬起
GetJoyStickKeyDownbool摇杆按键按下
GetJoyStickPosfloat摇杆位置
GetJoyStickPosMinfloat摇杆位置最小值
GetJoyStickPosMaxfloat摇杆位置最大值
CreateCustomTrackingDeviceNCustomInputTrackedDevicePtr创建自定义设备
SetCustomDeviceRayvoid设置自定义设备射线
SetCustomDeviceScreenPositionvoid设置自定义设备鼠标位置
SetEnableDeviceTrackingvoid开启设备追踪
IsTrackingInputTrackedDevicebool设备追踪状态
GetEventCameraNCameraPtr事件相机
GetControllerRaybool控制射线获取
SetDeviceRayFromScreenPositionvoid设置设备射线状态
OnHitActorsCallbackbool注册击中Actor组回调
OnHitActorCallbackbool注册击中Actor回调
UnRegisterHitActorCallbackvoid取消Actor组回调
UnRegisterHitActorsCallbackvoid取消Actor回调
InjectKeyEventbool注入按键事件
InjectMouseEventbool注入鼠标事件
InjectMouseButtonEventbool注入鼠标按键事件
InjectMouseWheelEventbool注入鼠标滚轮事件
InjectTouchEventbool注入按键状态
InjectTouchGestureEventbool注入触碰缩放事件
InjectControllerKeyEventbool注入手柄按键
InjectControllerTouchEventbool注入手柄触碰
InjectJoyStickKeybool注入摇杆事件
InjectTextbool注入文本

示例代码:

  • 获取键盘按键移动物体
cpp
if (NInput::GetKey(KeyboardKeys::A))
{
    m_CameraPosition = m_CameraRotation.AxisX() * -m_MoveSpeed;
}
else if (NInput::GetKey(KeyboardKeys::D))
{
    m_CameraPosition = m_CameraRotation.AxisX() * m_MoveSpeed;
}
else if (NInput::GetKey(KeyboardKeys::S))
{
    m_CameraPosition = m_CameraRotation.AxisZ() * -m_MoveSpeed;
}
else if (NInput::GetKey(KeyboardKeys::W))
{
    m_CameraPosition = m_CameraRotation.AxisZ() * m_MoveSpeed;
}
else if (NInput::GetKey(KeyboardKeys::Q))
{
    m_CameraPosition = m_CameraRotation.AxisY() * -m_MoveSpeed;
}
else if (NInput::GetKey(KeyboardKeys::E))
{
    m_CameraPosition = m_CameraRotation.AxisY() * m_MoveSpeed;
}
m_Camera->SetPosition(m_Camera->GetPosition() + m_CameraPosition);
  • 获取鼠标位置移动物体
cpp
m_CameraRotate = m_Camera->GetRotation().ToEulerZXY();
if (NInput::GetMouseButtonDown(MouseButton::Left))
{
    m_PreMousePosition = NInput::GetMousePosition();
}
if (NInput::GetMouseButton(MouseButton::Left))
{
    m_CurMousePosition = NInput::GetMousePosition();
    if (m_CameraRotate.z >= 90 && m_CameraRotate.z <= 270)
    {
        m_Flag = -1;
    }
    else
    {
        m_Flag = 1;
    }
    m_CameraRotate.x += (m_CurMousePosition.y - m_PreMousePosition.y) * m_RotateSpeed * m_Flag;
    m_CameraRotate.y += (m_CurMousePosition.x - m_PreMousePosition.x) * m_RotateSpeed;
    m_Camera->SetRotation(Quaternion::FromEulerZXY(m_CameraRotate));
    m_PreMousePosition = m_CurMousePosition;
}