示例#1
0
 // Start is called before the first frame update
 private void Start()
 {
     _animator                = GetComponent <Animator>();
     _gravity                 = -(2 * jumpHeight) / Mathf.Pow(timeToJumpApex, 2);
     _jumpVelocity            = Mathf.Abs(_gravity) * timeToJumpApex;
     BoxCollisionController2D = gameObject.GetComponent <BoxCollisionController2D>();
 }
示例#2
0
文件: Enemy.cs 项目: EthanBerk/MIAG
 public virtual void Start()
 {
     m_BoxCollisionController2D = gameObject.GetComponent <BoxCollisionController2D>();
     PathFindingGrid            = new PathFindingGrid(LayerMask, width, height, cellSize, origin);
     PathFindingGrid.UpdateNodes();
     PathFinder = new PathFinder(PathFindingGrid);
 }
示例#3
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);
        }