gpt4 book ai didi

android - Unit和Android是不是不能精确跟随手指?

转载 作者:行者123 更新时间:2023-11-29 23:31:27 26 4
gpt4 key购买 nike

我正在使用 Unity 创建一个 Android 游戏,我试图让一个对象跟随我的手指。这是我正在使用的代码。

for (int i = 0; i < Input.touchCount; i++)
{
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.touches[i].position), Vector2.zero);

Vector3 touchPosition = Camera.main.ScreenToWorldPoint(Input.touches[i].position);

if (Input.GetTouch(i).phase == TouchPhase.Moved && hit.collider != null)
{
transform.position = new Vector2(touchPosition.x, touchPosition.y + sizeY);
}
}

我将碰撞器放在对象下方,并将对象的大小添加到 Y 中,因此它出现在我的手指上方。问题是,如果我稍微快点移动手指,我就会失去留在后面的物体。由于物体滞后,如果我更快地移动手指,我最终会离开碰撞器区域,物体就会停止移动。我发现唯一可行的方法是摆脱 Raycast 的东西,让对象跟随屏幕上任何地方的触摸(我不喜欢那样)。

我只是想知道这是否是我可以从 Unity 和 Android 获得的最佳效果,或者是否有办法让对象以一个接一个的方式精确地跟随手指移动,没有延迟。我正在 Samsung Galaxy S8 上仅使用该对象进行测试,没有其他任何东西。

最佳答案

遇到这个问题的不止您一个。 Unity 的输入 API 是基于帧速率的,可能跟不上屏幕上触摸移动的速度。如果您正在处理需要根据屏幕上的触摸做出快速响应的事情,请使用新的 Unity 的 InputSystem .此 API 仍处于实验模式。

它的Touchscreen 类可用于访问屏幕上的触摸。您当前的代码应转换为如下所示:

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.Moved)
{
Vector2 touchLocation = touchscreen.allTouchControls[touchIndex].ReadValue().position;
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(touchLocation), Vector2.zero);
Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touchLocation);
transform.position = new Vector2(touchPosition.x, touchPosition.y + sizeY);
}
}

关于android - Unit和Android是不是不能精确跟随手指?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52597672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com