Я использую приведенный ниже код, чтобы переместить моего игрока с именем 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 испортился из-за того, что я меняю положение камеры?
РЕДАКТИРОВАТЬ: я забыл добавить, что странное изменение положения ТОЛЬКО происходит только в том случае, если вы в данный момент удерживаете касаниеэкран (или удерживая кнопку мыши), когда происходит дрожание экрана.В противном случае все происходит нормально.