Я пытался использовать 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 вдоль каждой оси вместо единицы на диагонали.