Esempio n. 1
0
    void stopWallRun()
    {
        if (wallRunState != null)
        {
            if (wallRunState.IsActive)
            {
                jumpCounter = 0;
            }

            wallRunState.Exit();
            wallRunState = null;
            wallRunToLastColliderAllowed = false;
            characterController.StartCoroutine(wallRunDelay());
        }
    }
Esempio n. 2
0
    bool tryToWallRun()
    {
        bool success = false;
        BurinkeruCharacterController characterController = (BurinkeruCharacterController)this.characterController;

        if (characterController == null)
        {
            return(false);
        }

        PlayerWallRunState.WallRunRaycastResult result = PlayerWallRunState.RaycastWalls(characterController.transform);

        if (result.Success)
        {
            if (lastWallRunCollider == null ||
                (lastWallRunCollider != result.Hit.collider) ||
                (lastWallRunCollider == result.Hit.collider && wallRunToLastColliderAllowed))
            {
                lastWallRunCollider = result.Hit.collider;

                Vector3 lookDirection = characterController.GetLookDirection();
                float   dot           = Vector3.Dot(lookDirection, result.Direction);
                success = true;
                Vector3 v   = characterController.GetLookDirection();
                Vector3 n   = result.Hit.normal;
                Vector3 vtn = Vector3.Cross(v, n);
                Vector3 res = Vector3.Cross(n, vtn);
                res.y *= 0.1f;

                result.RunDirection = res;

                wallRunState = new PlayerWallRunState(result);
                wallRunState.Enter(inputManager, characterController, components);
                wallRunState.RequestExit += onExitRequested;

                Debug.DrawRay(result.Hit.point, res * 10, Color.magenta, 1f);
            }
        }

        return(success);
    }