Вот что я пытаюсь повторить:
https://drive.google.com/open?id=1K9b7h77Ukcy5FulEX3pi9pHShyhpdmVT
Я пытаюсь сделать так, чтобы мои движения были такими же для мобильного приложения, над которым я работаю с космическим кораблем. Я сделал базовый скрипт, который перемещает его по экрану, когда я провожу пальцем влево и вправо, а также поворачиваю его, и когда я прекращаю двигать пальцем, он перемещает его назад, но он выглядит совсем по-другому, даже если я чувствую, что у меня такая же идея как эта игра в записи (Sky Rusher). Я очень новичок в Unity, поэтому любая помощь приветствуется! Я запускал это на Unity 2018.3.6 и на iPhone. Это было прикреплено к очень простой бумажной модели самолета, которая была помещена в начало координат с камерой непосредственно позади этого, потому что я хотел сначала уменьшить движение. Спасибо заранее!
Ниже приведен мой код, и если это поможет, это ссылка на мой проект, загруженный на Google Диск
using UnityEngine;
using System.Collections;
using UnityEngine.iOS;
public class ObjectShifter : MonoBehaviour
{
private Vector3 position;
private float width;
private float height;
private float shiftSpeed;
private float sideRotationAmount;
private float verticalRotationAmount;
private Quaternion rotation;
void Awake()
{
shiftSpeed = 5f;
sideRotationAmount = 0f;
verticalRotationAmount = 0f;
width = (float)Screen.width / 2.0f;
height = (float)Screen.height / 2.0f;
// Position used for the cube.
position = new Vector3(0.0f, 0.0f, 0.0f);
}
void Update()
{
// Handle screen touches.
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
Vector2 currentPos = touch.position;
if ((touch.phase == TouchPhase.Stationary) || (touch.phase == TouchPhase.Moved && touch.deltaPosition.magnitude < 1.5))
{
shiftBack();
}
else
{
Vector2 pos = touch.position;
pos.x = 3 * (pos.x - width) / width;
pos.y = 6 * (pos.y - height) / height;
sideRotationAmount = -15 * pos.y;
verticalRotationAmount = -5 * pos.x;
position = new Vector3(pos.x, pos.y, 0.0f);
transform.position = position;
}
}
else
{
shiftBack();
}
rotation = Quaternion.Euler(sideRotationAmount, verticalRotationAmount, verticalRotationAmount);
transform.rotation = rotation;
}
void shiftBack()
{
if(verticalRotationAmount > 0)
{
verticalRotationAmount -= (verticalRotationAmount%shiftSpeed);
verticalRotationAmount-=shiftSpeed;
}
else if(verticalRotationAmount < 0)
{
verticalRotationAmount -= (verticalRotationAmount%shiftSpeed);
verticalRotationAmount+=shiftSpeed;
}
if(sideRotationAmount > 0)
{
sideRotationAmount -= (sideRotationAmount%shiftSpeed);
sideRotationAmount-=shiftSpeed;
}
else if(sideRotationAmount < 0)
{
sideRotationAmount -= (sideRotationAmount%shiftSpeed);
sideRotationAmount+=shiftSpeed;
}
}
}