Я только начал изучать единство, и я борюсь с довольно глупой проблемой, но я не могу ее решить.
У меня есть простая функция, которая предназначена для просмотра компонентов вектора и изменения их размера до максимально допустимого, если они превышают определенный порог.
К сожалению, это, похоже, не работает, и я не могу понять, почему.
Вот код:
public class HumanController : MonoBehaviour
{
Rigidbody rBody;
Vector3 currSpeed;
Vector3 currAcceleration;
Vector3 dt = new Vector3(0.03333f, 0.03333f, 0.03333f);
public const float MAX_COMPONENT_ACCELERATION = 1;
public const float MAX_COMPONENT_SPEED = 5;
Logger logger = new Logger(new MyLogHandler());
void EnsureVectorLimit(Vector3 vector, float limit)
{
if (vector.x > limit)
vector.x = limit;
else if (vector.x < -limit)
vector.x = -limit;
if (vector.y > limit)
vector.y = limit;
else if (vector.y < -limit)
vector.y = -limit;
if (vector.z > limit)
vector.z = limit;
else if (vector.z < -limit)
vector.z = -limit;
}
// Start is called before the first frame update
void Start()
{
rBody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void FixedUpdate()
{
var horz = Input.GetAxis("Horizontal");
var vert = Input.GetAxis("Vertical");
// Rescale
currAcceleration += Vector3.Scale(new Vector3(horz, 0, vert), dt);
EnsureVectorLimit(currAcceleration, MAX_COMPONENT_ACCELERATION);
logger.Log($"Current acceleration: {currAcceleration.ToString()}");
currSpeed += Vector3.Scale(currAcceleration, dt);
EnsureVectorLimit(currSpeed, MAX_COMPONENT_SPEED);
rBody.transform.Translate(currSpeed);
}
}
Тем не менее, значения в журнале «ускорение по току» не ограничены ожидаемым пределом 1, а кажутся произвольно высокими / низкими.
Может ли кто-нибудь объяснить мне, что я делаю неправильно?
Спасибо