В Unity3d с помощью FPS-контроллера, как я могу поддерживать постоянную скорость игрока при автоматическом продвижении вперед, используя transform.forward?

Используя Unity3d First Person Controller, я хочу, чтобы плеер автоматически двигался в направлении, в котором смотрит камера. Он должен вести себя так же, как с помощью клавиш со стрелками, за исключением того, что я держу клавишу со стрелкой вверх нажатой. У меня это работает в сценарии ниже, однако игрок замедляется, когда он поворачивает камеру от первого лица от 0 градусов по оси y. Когда вы смотрите на 0 градусов по оси Y, скорость проигрывателя снова нормальная.

Как я могу изменить сценарий ниже, чтобы игрок всегда двигался с постоянной скоростью, независимо от поворота камеры?

Я установил этот скрипт в родительском узле Controller первого лица:

public var head : GameObject;

private var motor : CharacterMotor;

// Use this for initialization
function Awake () {
 motor = GetComponent(CharacterMotor);
}

// Update is called once per frame
function Update () {
 // Retrieve a forward direction based on camera rotation
 var directionVector = transform.forward;
 directionVector.y = 0;
 directionVector.Normalize();

 // Apply the direction to the CharacterMotor
 motor.inputMoveDirection = transform.rotation * directionVector;
 motor.inputJump = Input.GetButton("Jump");
}

// Require a character controller to be attached to the same game object
@script RequireComponent (CharacterMotor)
@script AddComponentMenu ("Character/FPS Input Controller")
1 ответ

Умножьте свое движение на Time.deltaTime. На этот раз время между кадрами.

Пример копирования из http://docs.unity3d.com/ScriptReference/Time-deltaTime.html

function Update () {
 // Move the object 10 meters per second!
 var translation : float = Time.deltaTime * 10;
 transform.Translate (0, 0, translation);
}

licensed under cc by-sa 3.0 with attribution.