我在Unity上安装了一款Android游戏,其响应速度不够快(从我搜索到的内容中,Unity确实存在Android上的输入延迟问题),因此我尝试创建一个Android库使用一种方法获取触摸数据并将其发送回调用者(我自己在Unity上的游戏)。
我认为这样做会轻而易举,但事实证明我似乎无法进行民意调查"对于触摸数据,我必须通过事件来获取它。所以我不得不做一些黑客/猜测来获得Unity的流程触摸视图,但是当我调用" setOnTouchListener"它覆盖了原始的听众,所以我的Unity游戏不再有任何接触。
所以我的问题是:关于如何解决这个问题的任何建议?
据我所知,我可以通过以下两个选项中的一个来解决它:
1)以某种方式轮询触摸信息(而不是附加听众),但我无法找到任何方法。
2)或获得前一个听众,这样我就可以在得到我需要的东西之后将其传递给它。
或当然3)放弃并让输入滞后并忍受我因此而得到的数百条不好的评论(我刚刚将我的游戏从一个没有的旧引擎迁移过来这种滞后,所以我的球员都很生气。)
由于
答案 0 :(得分:1)
您所描述的问题是Unity社区所熟知的。你不需要放弃或制作自己的插件。 Unity多年来一直致力于新的输入系统。它仍处于实验模式,但看起来很有希望。
如果旧的API太慢,您可以通过以下方式触摸屏幕:
void Update()
{
foreach (Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
Vector2 touchLocation = touch.position;
}
}
}
使用新的低级InputSystem API,您可以获得触摸信息:
public int touchIndex = 0;
void Update()
{
Touchscreen touchscreen = UnityEngine.Experimental.Input.Touchscreen.current;
if (touchscreen.allTouchControls[touchIndex].ReadValue().phase != PointerPhase.None &&
touchscreen.allTouchControls[touchIndex].ReadValue().phase != PointerPhase.Ended)
{
Vector2 touchLocation = touchscreen.allTouchControls[touchIndex].ReadValue().position;
}
}
您可以获取新的InputSystem API here。你需要并且在Unity 2018.2之上。最后,如果您遇到此API的任何问题,可以在this论坛中告知他们,并尽快修复。