Я пытаюсь переместить игрока вперед на фиксированное расстояние, но это работает только один раз. Как разрешить перемещение игрока более одного раза? - PullRequest
0 голосов
/ 16 марта 2020

Пожалуйста, проверьте код. После того, как игрок переместится на фиксированное расстояние один раз, он не переместится снова, даже если введено пространство. Как сделать так, чтобы я мог продолжать перемещать игрока после того, как игрок был перемещен один раз?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovementPC : MonoBehaviour
{

    [Header ("Move Settings")]

    private Vector3 StartingPosition, EndingPosition;
    public float moveDistance = 30f;
    public float LerpTime = 1f;
    private float CurrentLerpTime = 0;
    public bool movePressed = false;

    private void Start()
    {
        StartingPosition = transform.position;
        EndingPosition = transform.position + Vector3.forward * moveDistance;

    }

    void Update()
    { 

        if (Input.GetKeyDown("space")) 
        {
            movePressed = true;
            Debug.Log("dash pressed");
        }



        if (movePressed == true)
        {
            CurrentLerpTime += Time.unscaledDeltaTime;

            if (CurrentLerpTime >= LerpTime)
            {
                CurrentLerpTime = LerpTime;
            }

            float LerpPercentage = CurrentLerpTime / LerpTime;
            transform.position = Vector3.Lerp(StartingPosition, EndingPosition, LerpPercentage);

        }

    }

Любая помощь будет оценена. Спасибо за ваше время.

1 Ответ

0 голосов
/ 16 марта 2020

Проблема в том, что вы не сбрасываете переменные, которые управляют начальной / конечной позициями движения. Метод Start() вызывается, когда объект добавляется на уровень или когда нажимается Play, и в настоящее время это единственный метод, который сбрасывает эти значения. Поэтому, если вы хотите, чтобы эти значения были сброшены, вам нужно определить, когда движение закончилось, например:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovementPC : MonoBehaviour
{

    [Header ("Move Settings")]

    private Vector3 StartingPosition, EndingPosition;
    public float moveDistance = 30f;
    public float LerpTime = 1f;
    private float CurrentLerpTime = 0;

    private void Start()
    {
        ResetPositions();
    }

    void Update()
    { 

        if (Input.GetKeyDown("space")) 
        {
            CurrentLerpTime += Time.unscaledDeltaTime;

            if (CurrentLerpTime >= LerpTime)
            {
                ResetPositions();
                return;
            }

            float LerpPercentage = CurrentLerpTime / LerpTime;
            transform.position = Vector3.Lerp(StartingPosition, EndingPosition, LerpPercentage);

        }
    }

    void ResetPositions()
    {
        StartingPosition = transform.position;
        EndingPosition = transform.position + Vector3.forward * moveDistance;
        CurrentLerpTime = 0;
    }
...