Как я могу перемещать что-либо относительно его поверхности с фиксированной скоростью, предотвращая движение вдоль глобальной оси y? - PullRequest
0 голосов
/ 16 февраля 2020

Я пытался использовать transform.translate с Space.Self, но это связано с проблемой перемещения вверх или вниз, когда объект имеет какую-либо высоту. Использование Space.World не учитывает ни один из объектов, с которыми сталкиваются, так что просто это не будет работать. Я знаю, что это очень простая проблема, решаемая практически каждой 3D-игрой, но я не смог найти решение или найти его ни в одном поиске.

Это то, что я в настоящее время есть:

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

public class Movement : MonoBehaviour
{
    float speed = 0.15f;

    void FixedUpdate()
    {
        if (Input.GetKey("w"))
        {
            transform.Translate (0, 0, speed, Space.Self);
        }
        if (Input.GetKey("s"))
        {
            transform.Translate (0, 0, -speed, Space.Self);
        }
        if (Input.GetKey("d"))
        {
            transform.Translate (speed, 0, 0, Space.Self);
        }
        if (Input.GetKey("a"))
        {
            transform.Translate (-speed, 0, 0, Space.Self);
        }
    }
}

То, что у меня здесь, представляет несколько проблем. Если персонаж имеет какую-либо высоту, он будет пытаться плавать прямо в этом направлении, а не двигаться на полной скорости по горизонтали. Кроме того, перемещение по диагонали, например, когда w и s удерживаются одновременно, будет перемещать единицу знака 1 вдоль каждой оси вместо единицы на диагонали.

1 Ответ

0 голосов
/ 16 февраля 2020

Если вы хотите, чтобы ваш вектор направления на направление движения игнорировал ось Y, вы можете взять transform.forward и удалить компонент Y следующим образом:

Vector3 facingDirection = transform.forward;

Vector3 myNewDirectionVector = new Vector3(facingDirection.x, 0, facingDirection.z).normalized;

Затем вы можете переместить ваш объект следующим образом:

transform.position += myNewDirectionVector * speed * Time.deltaTime;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...