Простой ответ - настроить значение inAirControlAcceleration и
это должно дать вам нечто похожее на то, что вы себе представляете. Для еще большего
контроль, вы также можете заменить составное назначение
movement.inAirVelocity
с
movement.inAirVelocity +=
movement.direction * Time.deltaTime *
movement.inAirControlAcceleration
, чтобы значение масштабировалось
сумма ввода ч.
Если это все еще не дает вам того, что вы хотите, при условии, что вы
используя точный связанный скрипт (потому что вы больше ничего не публиковали),
Вот что делает соответствующий функциональный код в Update здесь:
//move horizontally as calculated in UpdateSmoothedMovementDirection * speed
//+ vertically by the speed calculated in ApplyGravity or ApplyJumping
//+ horizontally + vertically by the inAirMovement calculated in ApplyJumping
//+ horizontally by the adjustment to inAirMovement calculated in
//UpdateSmoothedMovementDirection
var currentMovementOffset = movement.direction * movement.speed
+ Vector3(0,movement.verticalSpeed,0)
+ movement.inAirVelocity;
currentMovementOffset *= Time.deltaTime;
movement.collisionFlags = controller.Move (currentMovementOffset);
Все, что вас волнует, это горизонтальное движение, так что единственное
переменные, о которых вам действительно нужно заботиться - это motion.direction,
движение.скорость и движение.в воздушной скорости.
Часть, которая выполняет работу:
function UpdateSmoothedMovementDirection() { //called by Update every frame
//...irrelevant stuff
//move direction is *always* (canControl is never changed in this script)
//the horizontal input when the absolute horizontal input is greater than 0.1
if (movement.isMoving) movement.direction = Vector3 (h, 0, 0);
//calculate the speed change only when on the ground
if (controller.isGrounded) {
var curSmooth = movement.speedSmoothing * Time.deltaTime;
var targetSpeed = Mathf.Min (Mathf.Abs(h), 1.0);
if(Input.GetButton("Fire2") && canControl)
targetSpeed *= movement.runSpeed;
else
targetSpeed *= movement.walkSpeed;
movement.speed = Mathf.Lerp (movement.speed, targetSpeed, curSmooth);
//...irrelevant stuff
}
//inAirVelocity is going to be adjusted horizontally by Time.deltaTime
//in the direction of horizontal input
else {
//...irrelevant stuff
if (movement.isMoving)
movement.inAirVelocity += Vector3(Mathf.Sign(h),0,0) * Time.deltaTime
* movement.inAirControlAcceleration;
}
}
Часть, которая устанавливает начальную inAirVelocity:
function ApplyJumping() { //called by Update every frame
//...irrelevant stuff
//When on the ground and we can jump, the inAirVelocity will be
//the motion of the platform we're on
if (controller.isGrounded) {
if (jump.enabled && Time.time < jump.lastButtonTime + jump.timeout) {
//...irrelevant stuff
movement.inAirVelocity = lastPlatformVelocity;
//...irrelevant stuff
}
}
}
Что, вероятно, не то, что вы ожидаете, что вы только когда-либо рассчитывать
скорость, когда на земле.
Оказавшись в воздухе, вы двигаетесь со скоростью
вы двигались, когда вы были в последний раз на земле на входе
направление (movement.direction
) + некоторая регулировка зависит от входа
направление (inAirVelocity
).
Я предполагаю, что это должно симулировать
инерция как-то, но это действительно не работает, потому что вы можете
поменяйте направление, и замедления нет.
Чтобы получить правильное направление по инерции, вам необходимо переместить
перейти на движение.направление в блок if(Controller.isGrounded)
что следует. Чтобы получить фактическое инерционное замедление, вы бы
вычесть из скорости в операторе else с некоторой скоростью сглаживания до
это 0 и держите lastPlatformVelocity
отдельно от inAirVelocity
,
добавьте это как отдельный термин и также замедлите его.
Чтобы обеспечить полный контроль скорости в воздухе, я рекомендую вам переместить
ускорить процесс из блока if (в этом случае inAirVelocity
может не
необходимо изменить в UpdateSmoothedMovementDirection
).
С другой стороны,
Вы можете изменить то, что вы используете для расчета движения при прыжке
делать что-то вроде
if(!controller.isGrounded) movement.speed = inAirSpeed;
но это приведет к неестественному поведению, и вы
Скорее всего, придется сделать некоторые настройки в воздухе.