今天遇到一个需求:获得手绘版压感信息,利用压感信息控制笔刷大小。需要同时支持win&mac。
- uWintab是一个比较古老的方案,虽然可以获得满多信息,但似乎只能用在window系统上。好像是wacom提供的(测试过可用
hecomi/uWintabgithub.com
可我想mac和win都能用,于是就找到了新的方案,而且是unity官方的输入系统api,不是外部插件。不过这东西还是有点新,google的资料也不多,所以记一下以防有人有类似需求。
使用流程如下:
1.将unity的旧的输入系统转换到新的input system[1]
- 先去PackageManager把Input System下载下来
- 如果你的程序里用到了原来的输入系统的属性或者函数,就需要把他们改成新的方式,比如鼠标位置要这么改:
其他的见官方文档:
Migrating from the old input systemdocs.unity3d.com
2.转换完之后你可能会遇到一个错误:
InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System package in Player Settings.
- 这个错误是因为场景中具有StandaloneInputModule引起的,这是就输入系统的ui输入模块。解决方案是选中eventsystem,看inspecor那原本有个按钮“inputsystemUIinputModule”,点一下就会变成下图这样:
如果还是不行就去Player Setting里把Active Input Handling 改成“both”。
方法是从论坛里看到的:
https://forum.unity.com/threads/unity-render-pipeline-debug-clashes-with-new-input-system.735179/forum.unity.com
3.接着你就可以在代码中使用新的Input System了
你可能不知道怎么用,这个时候你得知道官方是很完备的,再新的东西,也会给出例子。把下面附带的包也顺便下载下来,按照提示安装示例程序。
你会得到这样一个场景。可以从下拉列表里看到它支持的输入设备:
1. Pen (ISX Only)
2. Keyboard & Mouse
3. Xbox
4. DualShock
5. Gamepad Diagram
6. Joystick (TODO)
7. Pen (SX Only) Touch
具体使用方法就看他的原代码把~
我这里给手绘版的使用举个例子
在PenISX.cs的这段代码基本就可以得到大部分数据了。操作也很简单,先定义pen,然后直接pen.xxxx读取数据。
- 注意别忘记头文件
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
ps: 手绘版是wacom的,其他的未测试过,但是估计方案2的input system也能用8
ps2:注意unity的版本,inputsystem有可能不支持,我的版本是2020.1(官方文档中说2020.1才支持macos使用pen的信息)[2]
参考
- ^一个问答: https://stackoverflow.com/questions/63818824/how-do-i-get-pen-pressure-values-in-unity-using-s-pen-on-android
- ^官方文档: https://docs.unity3d.com/Packages/com.unity.inputsystem@0.9/manual/Pen.html