Unity_Input类

Unity中的Input.GetAxisRaw函数主要用于处理键盘输入,返回-1、1或0,适用于需要即时响应的控制场景。该方法能够帮助开发者精确控制游戏对象的移动和行为。
摘要由CSDN通过智能技术生成
Unity的外部输入资源有键盘、鼠标、移动设备的触摸、游戏杆等很多种类。Input类就是用来管理这些的输入值。
Input类查看
可在U3D界面打开进行查看编辑


参数解释
轴(Axes):设置当前项目中的所有输入轴:size为轴的数量。0,1…元素可以对每个轴进行修改。
名称(Name):轴的名称,用于游戏加载界面和脚本中。
描述名称(Descriptive Name):游戏加
Unity中,可以通过重写派生自UnityEngine.Windows.WindowsWindow的自定义窗口脚本的WndProc方法来处理Windows消息。通过重写WndProc方法,您可以获取和处理各种Windows消息,包括WM_INPUT消息。 下面是一个示例代码,展示了如何在Unity中处理WM_INPUT消息: ```csharp using UnityEngine; using System; using System.Runtime.InteropServices; public class RawInputExample : MonoBehaviour { const int WM_INPUT = 0x00FF; protected override void WndProc(ref Message message) { if (message.Msg == WM_INPUT) { IntPtr hRawInput = message.LParam; uint dataSize = 0; // 获取原始输入数据的大小 GetRawInputData(hRawInput, RID_INPUT, IntPtr.Zero, ref dataSize, (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER))); if (dataSize > 0) { IntPtr data = Marshal.AllocHGlobal((int)dataSize); // 获取原始输入数据 if (GetRawInputData(hRawInput, RID_INPUT, data, ref dataSize, (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER))) == dataSize) { RAWINPUT rawInput = Marshal.PtrToStructure<RAWINPUT>(data); // 在这里处理原始输入数据 // 示例:检查输入设备型是否为鼠标 if (rawInput.header.dwType == RIM_TYPEMOUSE) { RAWMOUSE mouseData = rawInput.mouse; // 在这里处理鼠标输入数据 int deltaX = mouseData.lLastX; int deltaY = mouseData.lLastY; Debug.Log("Mouse Delta: " + deltaX + ", " + deltaY); } } Marshal.FreeHGlobal(data); } base.WndProc(ref message); return; } base.WndProc(ref message); } [StructLayout(LayoutKind.Sequential)] struct RAWINPUTHEADER { public uint dwType; public uint dwSize; public IntPtr hDevice; public IntPtr wParam; } [StructLayout(LayoutKind.Explicit)] struct RAWINPUT { [FieldOffset(0)] public RAWINPUTHEADER header; [FieldOffset(16)] public RAWMOUSE mouse; // 其他输入设备型的数据结构 } [StructLayout(LayoutKind.Sequential)] struct RAWMOUSE { public ushort usFlags; public uint ulButtons; public uint ulRawButtons; public int lLastX; public int lLastY; public uint ulExtraInformation; } const uint RIDEV_INPUTSINK = 0x00000100; const int RIM_TYPEMOUSE = 0x00000000; const int RID_INPUT = 0x10000003; [DllImport("user32.dll")] static extern uint GetRawInputData(IntPtr hRawInput, uint uiCommand, IntPtr pData, ref uint pcbSize, uint cbSizeHeader); [DllImport("user32.dll")] static extern bool RegisterRawInputDevices(RAWINPUTDEVICE[] pRawInputDevices, uint uiNumDevices, uint cbSize); [StructLayout(LayoutKind.Sequential)] struct RAWINPUTDEVICE { public ushort usUsagePage; public ushort usUsage; public uint dwFlags; public IntPtr hwndTarget; } void Start() { RAWINPUTDEVICE[] rawInputDevices = new RAWINPUTDEVICE[1]; rawInputDevices[0].usUsagePage = 0x01; // HID_USAGE_PAGE_GENERIC rawInputDevices[0].usUsage = 0x02; // HID_USAGE_GENERIC_MOUSE rawInputDevices[0].dwFlags = RIDEV_INPUTSINK; rawInputDevices[0].hwndTarget = this.Handle; if (!RegisterRawInputDevices(rawInputDevices, (uint)rawInputDevices.Length, (uint)Marshal.SizeOf(typeof(RAWINPUTDEVICE)))) { Debug.LogError("Failed to register raw input devices"); } } } ``` 上述示例代码中,重写了WndProc方法来处理Windows消息。在WndProc方法中,检查消息是否为WM_INPUT消息,并获取原始输入数据进行处理。示例代码中处理了鼠标输入数据,您可以根据实际需求进行相应的处理。 请注意,由于涉及到Windows API的调用,需要将上述代码放置在派生自UnityEngine.Windows.WindowsWindow的自定义窗口脚本中,并确保脚本被正确添加到场景中。此外,还需要在Unity项目的Player Settings中启用"Allow 'unsafe' Code"选项。 希望这可以帮助您处理WM_INPUT消息并获取原始输入数据。如果有任何进一步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值