Я пытаюсь создать направленное сопротивление для своей игры, в которой вы управляете парящим космическим кораблем (например, подкраивание от звездных звезд). Перетаскивание, которое уже находится в единстве, не имеет никакого смысла для зависания кораблей, машин и т. Д., Потому что они обычно обтекаются спереди и не являются сторонами. Я плохо разбираюсь в физике, но из-за того, что я знаю, сопротивление увеличивается быстрее. Я написал этот скрипт, но он не работает, объект ускоряется на нем, когда добавляется сила.Как создать направленное сопротивление, изменяя скорость объекта?
public Vector3 dragFactor;
private Rigidbody _rb;
void Start() {
_rb = GetComponent<Rigidbody>();
}
void FixedUpdate() {
Vector3 vel = _rb.velocity;
if(vel.x>0)
vel.x -= vel.x * dragFactor.x;
else
vel.x += vel.x * dragFactor.x;
if (vel.y > 0)
vel.y -= vel.y * dragFactor.y;
else
vel.y += vel.y * dragFactor.y;
if (vel.z > 0)
vel.z -= vel.z * dragFactor.z;
else
vel.z += vel.z * dragFactor.z;
_rb.velocity = vel;
}
Знаете ли вы, что я делаю неправильно или что можно изменить?
В документах указано, что вы не должны напрямую манипулировать rb.velocity. Вместо этого я бы пошел на rb.AddForce в более или менее суммах, в зависимости от того, чего вы пытаетесь достичь. Я не совсем понимаю, что вы подразумеваете под направленным перетаскиванием, поэтому я не могу привести пример. – Absinthe
@Absinthe Направленное перетаскивание Я имею в виду, что сопротивление должно быть сильнее, когда объект движется, например, вправо, чем когда он движется вперед. –
OK, поэтому вам нужно добавить силы в нужном направлении, поэтому настройте векторы для положительных и отрицательных; если vel.x> ваша целевая rb.AddForce (myNegativeXVector), иначе rb.AddForce (myPositiveXVector) – Absinthe