Ошибка при максимизации при воспроизведении

#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;