, так что это то, что для меня не имеет смысла. Предполагается, что игровой объект (карта) перемещается на разницу между последней позицией касания и текущей позицией касания. Он сначала меняет свое положение на каждое касающееся положение, но затем перемещается так, как предполагалось. Он телепортируется. Я хочу, чтобы он просто двигался по смещению. Он отлично работает с вводом мышью на P C, поэтому меня это сбивает с толку. Прошло много времени с тех пор, как я кодировал, так что, вероятно, это будет что-то глупое. Вот какой-то код:
if (touch)
{
int nbTouches = Input.touchCount;
if (nbTouches > 0)
{
for (int i = 0; i < nbTouches; i++)
{
Touch touch = Input.GetTouch(i);
TouchPhase phase = touch.phase;
switch (phase)
{
case TouchPhase.Began:
timeTouched = Time.time;
touchPos = touch.position;
if (G.mapIsOn)
{
if (!holding)
{
holding = true;
Vector3 touchDownPos = touchPos;
touchDownPos.z = Camera.main.nearClipPlane;
// touchDownPos.z = Camera.main.nearClipPlane - MapController.MC.mapBackground.transform.position.z;
touchDownPos = Camera.main.ScreenToWorldPoint(touchDownPos);
lastTouchPos = touchDownPos;
}
}
break;
case TouchPhase.Moved:
if (G.mapIsOn && holding)
{
Vector3 newPos = touch.position;
newPos.z = Camera.main.nearClipPlane;
// newPos.z = Camera.main.nearClipPlane - MapController.MC.mapBackground.transform.position.z;
newPos = Camera.main.ScreenToWorldPoint(newPos);
// if (lastTouchPos != newPos)
// {
if (onHoldMove != null)
{
onHoldMove(newPos, lastTouchPos);
}
// }
/* if (onHoldMoveDelta != null)
{
onHoldMoveDelta(touch.deltaPosition);
}*/
// mapBackground.transform.position = newMapPos;
lastTouchPos = newPos;
// lines.ScaleLines();
// Debug.Log("Moving: " + newPos);
}
// print("Touch index " + touch.fingerId + " has moved by " + touch.deltaPosition);
break;
case TouchPhase.Stationary:
// print("Touch index " + touch.fingerId + " is stationary at position " + touch.position);
break;
case TouchPhase.Ended:
// if (G.mapIsOn)
// {
if (holding) holding = false;
// }
if (Time.time - timeTouched <= tapTime)
{
tapped = true;
}
break;
case TouchPhase.Canceled:
// print("Touch index " + touch.fingerId + " cancelled");
break;
}
}
Извините, если форматирование отключено. Также извините за слишком много прокомментированных строк, вы можете видеть, что я пробовал много разных «исправлений».
public void HandleOnHoldMove(Vector3 newPos, Vector3 lastPos)
{
Vector3 offset = lastPos - newPos;
Vector3 mapPos = mapBackground.transform.position;
Vector3 newMapPos = new Vector3(mapPos.x - offset.x * mapDragBoost, mapPos.y - offset.y * mapDragBoost, mapPos.z);
mapBackground.transform.position = newMapPos;
lines.ScaleLines();
}