Итак, чтобы понять движение, лучше сначала понять Векторы в Единстве. Поскольку вы хотите перемещать куб в прямом направлении, я предполагаю, что это 3D-игра, и в этом случае вы хотите использовать Vector3.
Vector3 состоит из трех компонентов: X, Yи Z. Каждый компонент привязан к оси. Проще говоря, X связан слева и справа, Y - вверх и вниз, а Z - вперед и назад. Таким образом, Vector3 position = new Vector3(0, 1, 2);
будет вектором, который на 1 единицу выше и на 2 единицы впереди начальной позиции.
Предполагая, что вы прикрепили этот скрипт к кубу, который хотите переместить, вы можете отслеживать его положение с помощью transform.position
. Итак, если вы хотите переместить куб на одну единицу вперед, ваш код будет выглядеть примерно так:
if(Input.GetKeyDown(KeyCode.W)) // This code will activate once the user presses W.
{
transform.position += new Vector3(0, 0, 1);
}
Это переместит куб на одну единицу вперед в направлении Z. Однако вы не хотите, чтобы он телепортировался, вы хотите, чтобы он двигался, верно? В этом случае вы хотите проверить функцию Unity Vector3.Lerp. По сути, вы будете использовать ее для плавного перехода объекта между двумя определенными позициями. Вам нужно будет реализовать таймер и цикл for, чтобы это работало правильно.
Итак, подведем итог: для перемещения на одну единицу вперед в направлении Z ваш код будет выглядеть примерно так:
if(Input.GetKeyDown(KeyCode.Z))
{
float startTime = Time.time; //Time.time is the current in-game time when this line is called. You'll want to save this to a variable
float speed = 1.0f; //The speed if something you'll want to define. The higher the speed, the faster the cube will move.
Vector3 startPosition = transform.position; //Save the starting position to a different variable so you can reference it later
Vector3 endPosition = startPosition + Vector3.forward; //Vector3.Forward is equivalent to saying (0, 0, 1);
float length = Vector3.Distance(startPosition, endPosition); //You'll need to know the total distance that the cube will move.
while(transform.position != endPosition) //This loop while keep running until the cube reaches its endpoint
{
float distCovered = (Time.time - startTime) * speed; //subtracting the current time from your start time and multiplying by speed will tell us how far the cube's moved
float fraction = distCovered / length; //This will tell us how far along the cube is in relation to the start and end points.
transform.position = Vector3.Lerp(startPosition, endPosition, fraction); //This line will smoothly transition between the start and end points
}
}
Надеюсь, это поможет вам. Я впервые отвечаю на вопрос, так что извините, если я что-то не так понял / он не самый оптимизированный. Удачи!