Как сделать так, чтобы смещение сенсорного экрана стало более плавным, как в этой игре (Sky Rusher)? - PullRequest
0 голосов
/ 28 апреля 2019

Вот что я пытаюсь повторить: 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;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...