我有一个2d平台游戏,有一个移动的玩家。它完美统一,我将其打包并在我的galaxy s7上下载了apk,这也很完美。
然后我在我当地的超市平板电脑显示器和我试过的两款平板电脑上进行了测试,如果我向左触摸,它会暂停一秒钟,然后向左移动。
动画的敌人,旋转的硬币和物理工作正常,所以没有那种类型的滞后,只是暂停时移动,这让我觉得我必须移动的代码是错误的。这些平板电脑也看起来相当高。
以下是我如何移动播放器,我在更新功能中调用它:
List<FingerTouch> currentTouches = new List<FingerTouch>();
public class FingerTouch
{
public int id;
public float beganXPos;
public FingerTouch (int fingerId, float fingerBegan)
{
this.id = fingerId;
this.beganXPos = fingerBegan;
}
}
if (!disableMovment)
{
for (int i = 0; i < Input.touchCount; i++)
{
if (Input.GetTouch(i).phase == TouchPhase.Began && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
{
float xPos = Input.GetTouch(i).position.x;
if(xPos < Screen.width / 5)
{
playerLeft = true;
} else if (xPos > ((Screen.width / 5) * 4))
{
playerRight = true;
} else
{
playerUp = true;
}
int fingerId = Input.GetTouch(i).fingerId;
currentTouches.Add(new FingerTouch(fingerId, xPos));
} else if (Input.GetTouch(i).phase == TouchPhase.Ended)
{
if (currentTouches.Count != 0)
{
for (int j = 0; j < currentTouches.Count; j++)
{
FingerTouch currentTouch = currentTouches[j];
if (Input.GetTouch(i).fingerId == currentTouch.id || currentTouches.Count == 1)
{
if (currentTouches[j].beganXPos < Screen.width / 5)
{
playerLeft = false;
}
else if (currentTouches[j].beganXPos > ((Screen.width / 5) * 4))
{
playerRight = false;
}
else
{
playerUp = false;
}
currentTouches.RemoveAt(j);
break;
}
}
} else {
playerUp = false;
playerRight = false;
playerLeft = false;
}
}
}
}
它看起来有点超过顶部,但它基本上将屏幕划分为3个部分20/60/20,左移右移。当用户触摸时,它存储该触摸并且当其被释放时,其被移除。
这允许多次触摸(跳跃和移动),同时还可以防止跳跃,向右滑动手指并将其移除并处于无限跳跃状态,因为您没有在中间移开手指。
之后,它会像这样移动玩家:
if (hitLeftWall && playerLeft)
{
playerBody.velocity = new Vector2(0, playerBody.velocity.y);
}
这里有什么东西可以让玩家在移动前暂停吗?由于玩家有僵硬的身体,这应该是固定更新吗?我是团结的新手,所以我不确定正确的做事方式。