Объект X pos резко меняется после окончания дрожания экрана - PullRequest
0 голосов
/ 06 декабря 2018

Я использую приведенный ниже код, чтобы переместить моего игрока с именем balloon, влево и вправо по оси x, вычисляя разницу между тем, где вы впервые коснулись (или нажали), и тем, где вы в данный момент касаетесь, используя ScreenToWorldPoint.

void Update()
{
    if (gameStarted)
        if (Input.GetMouseButtonDown(0))
        {
            firstTouch = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            startPos = balloon.position;
        }

        if (Input.GetMouseButton(0))
            CheckTouchPosition();
    }
}

void CheckTouchPosition()
{
    Vector2 currentTouch = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    float horizontalDif = currentTouch.x - firstTouch.x;
    balloon.position = new Vector2(startPos.x + horizontalDif * 1.2f, balloon.position.y);
}

Это работает нормально, за исключением случаев, когда я сталкиваюсь с препятствием и вызываю функцию дрожания триггера, которая выполняет обычное дрожание экрана.После того, как дрожание экрана заканчивается, игрок переводится по оси X, из того, что я могу сказать в инспекторе, примерно удваивая свою позицию X.

public class ScreenShake : MonoBehaviour {

Vector3 initialPosition;
float shakeDuration;

public bool shaking;

[SerializeField] float shakeMagnitude = 0.5f;
[SerializeField] float dampingSpeed = 1.0f;

void Update()
{
    if (shakeDuration > 0)
    {
        shaking = true;
        transform.localPosition = initialPosition + Random.insideUnitSphere * shakeMagnitude;
        shakeDuration -= Time.unscaledDeltaTime * dampingSpeed;
    }
    else
    {
        shakeDuration = 0f;
        transform.localPosition = initialPosition;
        shaking = false;
    }
}

public void TriggerShake(float duration, Vector3 position)
{
    shakeDuration = duration;
    initialPosition = position;
}

}

Я не могу понятьпочему X шара меняется после дрожания экрана, но этого не происходит, если я не вызываю эту функцию.Я думаю, может быть, это связано с тем, что ScreenToWorldPoint испортился из-за того, что я меняю положение камеры?

РЕДАКТИРОВАТЬ: я забыл добавить, что странное изменение положения ТОЛЬКО происходит только в том случае, если вы в данный момент удерживаете касаниеэкран (или удерживая кнопку мыши), когда происходит дрожание экрана.В противном случае все происходит нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...