#c# #unity3d
#c# #unity3d
Вопрос:
В настоящее время у меня проблемы с прыжками, все работает нормально, когда мое игровое окно маленькое, но когда я вывожу мое игровое окно на максимальное отображение создаю его, тогда у моей механики прыжков возникают проблемы, вместо того, чтобы прыгать на нужную величину, которую я сказал, она просто немного подскакивает и становитсяпотянуло обратно вниз. В настоящее время я использую для этого метод обновления, и вот код:
void CalculateMovement()
{
horizontalInput = Input.GetAxis("Horizontal");
_playerAnim.SetFloat("speed", Mathf.Abs(horizontalInput));
if (_controller.isGrounded == true)
{
_playerAnim.SetBool("isJumping", false);
_canDoubleJump = false;
_canWallJump = false;
_direction = new Vector3(horizontalInput, 0, 0);
_velocity = _direction * _speed;
if (Input.GetKeyDown(KeyCode.Space) amp;amp; _canWallJump == false amp;amp; _canDoubleJump == false)
{
_playerAudio.clip = _playerSoundsClip[5];
_playerAudio.Play();
_playerAnim.SetBool("isJumping", true);
Instantiate(_dustSmoke, new Vector3(transform.position.x, transform.position.y - 0.5f, transform.position.z),Quaternion.identity);
_canDoubleJump = true;
_yVelocity = _jumpHeight;
}
}
else
{
if (_canWallJump == false amp;amp; Input.GetKeyDown(KeyCode.Space) amp;amp; _canDoubleJump == true)
{
_yVelocity = 0;
_playerAudio.clip = _playerSoundsClip[5];
_playerAudio.Play();
_playerAnim.SetBool("isJumping", true);
Instantiate(_dustSmoke, new Vector3(transform.position.x, transform.position.y - 0.5f, transform.position.z), Quaternion.identity);
_yVelocity = _jumpHeight * _bonusJumpMultiplier;
_canDoubleJump = false;
}
else if (_canWallJump == true amp;amp; Input.GetKeyDown(KeyCode.Space) )
{
_yVelocity = 0;
_yVelocity = _jumpHeight;
_velocity = _wallSurfaceNormal * _speed * pushPower;
_playerAudio.clip = _playerSoundsClip[7];
_playerAudio.Play();
Instantiate(_dustSmoke, new Vector3(transform.position.x, transform.position.y - 0.5f, transform.position.z), Quaternion.identity);
_canWallJump = false;
SwitchRotation();
}
_yVelocity -= _gravity;
}
_velocity.y = _yVelocity;
_controller.Move(_velocity*Time.deltaTime );
}
Я пытался использовать Debug.log(_yVelocity.ToString())
, но число кажется нормальным, и я также пытался жестко кодировать числа в своем методе перемещения, но, тем не менее, у него все та же ошибка, так что кто-нибудь знает, как это исправить.
редактировать: после того, как я повозился с этим, я обнаружил, что проблема МОЖЕТ быть связана с моим _yVelocity = _gravity
, поскольку при его изменении мой персонаж прыгает на большую высоту на маленьком дисплее, но он прыгает нормально при «Максимизации на дисплее».
Комментарии:
1. Имеете ли вы какое-либо отношение к элементу пользовательского интерфейса, размеру окна? Является
_gravity
переменной или_jumpHeight
переменной с плавающей запятой, вы устанавливаете их с помощью кода?2. нет, вовсе нет, они не имеют никакого отношения к элементу пользовательского интерфейса, а для _gravity и _jumpHeight я поместил их как частные и [Сериализовать], чтобы изменить их в инспекторе, и больше не изменял их
3. Используете ли вы код редактора
#if UNITY_EDITOR
? Кстати, если вы используете контроллер символов, вам, вероятно, следует использовать свою логику в FixedUpdate вместо обновления. Может быть, это поможет.
Ответ №1:
Я выяснил, почему это происходит, оказывается, все было из-за частоты кадров, поэтому я смог исправить это, просто получив входные данные от void Update () и применив его в void FixedUpdate;