我是C#Unity的新手,我刚刚学到了一些入门知识, 我正在制作一个简单的带有触摸增量的2D触摸控件,以在屏幕上的任何位置平移GameObject和“带有Touch的游戏对象”,并拖动其沿触摸方向移动而不是“触摸位置”。
例如Rise Up 2D Game Like控件,其中Sphere通过触摸拖动来控制。
但是问题是当我在不同的屏幕尺寸上进行测试时,翻译或触摸速度不同。
如果屏幕尺寸较小,例如640x800,则触摸速度会变慢。
如果屏幕尺寸很大,例如1440x2560,则触摸速度很快。
这是我正在使用的示例代码。
private Touch firstTouch;
public Vector3 dragDistance;
private Vector3 StopDrag;
public Transform player;
void FixedUpdate () {
if (Input.touchCount > 0)
{ firstTouch = Input.GetTouch(0);
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
dragDistance = firstTouch.deltaPosition;
player.transform.Translate(dragDistance / 100 );
}
if (Input.GetTouch(0).phase == TouchPhase.Stationary)
{
dragDistance = StopDrag ;
}}}
非常抱歉我的英语不好
答案 0 :(得分:1)
如果我正确理解了您的问题,那么解决该问题的方法就是更改线路
dragDistance = firstTouch.deltaPosition;
到
Vector2 dragDistanceUnscaled = firstTouch.deltaPosition;
dragDistance = new Vector2(dragDistanceUnscaled.x / Screen.Width,
dragDistanceUnscaled.y / Screen.Height)
此外,至少就我所知,您只需要Vector2
即可,而对于dragDistance则不需要Vector3
。
答案 1 :(得分:0)
尝试将FixedUpdate()更改为Update()。它应该可以工作
答案 2 :(得分:0)
问题在这一行: player.transform.Translate(dragDistance / 100);
'100'值是相对于设备本身的帧速。 因此,修复应使用Time.deltaTime *值。 其中value可以是任何浮点数,例如100。 这样,无论设备质量高低,预期的转换都将是相同的。