示例#1
0
        private void Update()
        {
            if (health < 0)
            {
                gameObject.SetActive(false);
            }
            var input          = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
            var targetVelocity = input.x * moveSpeed;

            WallSliding = false;

            _velocity.x = Mathf.SmoothDamp(_velocity.x, targetVelocity, ref _smoothDampVelocity,
                                           (BoxCollisionController2D.Collisions.Below) ? accelerationTimeGrounded : accelerationTimeAirborne);


            int wallDirectionX = (BoxCollisionController2D.Collisions.Left) ? -1 : 1;

            if ((BoxCollisionController2D.Collisions.Left || BoxCollisionController2D.Collisions.Right) && !BoxCollisionController2D.Collisions.Below &&
                _velocity.y < 0)
            {
                WallSliding = true;
                if (_velocity.y < -_wallSlideSpeedMax)
                {
                    _velocity.y = -_wallSlideSpeedMax;
                }

                if (_timeToWallUnstick > 0)
                {
                    _smoothDampVelocity = 0;
                    _velocity.x         = 0;
                    if (input.x != wallDirectionX && input.x != 0)
                    {
                        _timeToWallUnstick -= Time.deltaTime;
                    }
                    else
                    {
                        _timeToWallUnstick = wallStickTime;
                    }
                }
                else
                {
                    _timeToWallUnstick = wallStickTime;
                }
            }

            if (BoxCollisionController2D.Collisions.Above || BoxCollisionController2D.Collisions.Below)
            {
                _velocity.y = 0;
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                if (WallSliding)
                {
                    if (input.x == 0)
                    {
                        _velocity.x = -wallDirectionX * wallJumpOff.x;
                        _velocity.y = wallJumpOff.y;
                    }
                    else if (Math.Abs(input.x - (-wallDirectionX)) < 0.1)
                    {
                        _velocity.x = -wallDirectionX * wallJumpLeap.x;
                        _velocity.y = wallJumpLeap.y;
                    }
                    else if (Math.Abs(wallDirectionX - input.x) < 0.1)
                    {
                        _velocity.x = -wallDirectionX * wallJumpAganst.x;
                        _velocity.y = wallJumpAganst.y;
                    }
                }

                if (BoxCollisionController2D.Collisions.Below)
                {
                    _velocity.y = _jumpVelocity;
                }
            }



            _animator.SetBool("Walking", BoxCollisionController2D.Collisions.Below && input.x != 0);
            _velocity.y += _gravity * Time.deltaTime;
            BoxCollisionController2D.Move(_velocity * Time.deltaTime);
        }
示例#2
0
文件: Enemy.cs 项目: EthanBerk/MIAG
 public void applyVelocity()
 {
     m_BoxCollisionController2D.Move(velocity * Time.deltaTime);
 }