示例#1
0
    public static WallRunRaycastResult RaycastWalls(Transform transform)
    {
        WallRunRaycastResult result = new WallRunRaycastResult();
        GameObject           rightWall;
        GameObject           leftWall;
        RaycastHit           leftHit;
        RaycastHit           rightHit;
        float distFromRight = raycastInDirection(transform, transform.right, out rightWall, out rightHit);
        float distFromLeft  = raycastInDirection(transform, -transform.right, out leftWall, out leftHit);

        if (distFromLeft > 0 && distFromLeft > distFromRight)
        {
            result.Success          = true;
            result.WallRunType      = WallRunType.LEFT;
            result.ObjectThatWasHit = leftWall;
            result.Distance         = distFromLeft;
            result.Hit       = leftHit;
            result.Direction = (leftHit.point - transform.position).normalized;
        }
        else if (distFromRight > 0 && distFromRight > distFromLeft)
        {
            result.Success          = true;
            result.WallRunType      = WallRunType.RIGH;
            result.ObjectThatWasHit = rightWall;
            result.Distance         = distFromRight;
            result.Hit       = rightHit;
            result.Direction = (rightHit.point - transform.position).normalized;
        }

        return(result);
    }
示例#2
0
 public PlayerWallRunState(WallRunRaycastResult hitResult) : base()
 {
     this.hitResult = hitResult;
     collider       = hitResult.ObjectThatWasHit.GetComponent <Collider>();
     IsActive       = false;
     parameters     = CharacterControllerParameters.Instance;
 }
示例#3
0
        /// <summary>
        /// Returns true if raycast hit wall and a wall run
        /// can be intiated.
        /// </summary>
        /// <param name="transform"></param>
        /// <returns></returns>
        protected static bool raycastWalls(Transform transform, float raycastLenght, out WallRunRaycastResult wallRunRaycastResult, int layerMask)
        {
            WallRunRaycastResult result = new WallRunRaycastResult();
            GameObject           rightWall;
            GameObject           leftWall;
            RaycastHit           leftHit;
            RaycastHit           rightHit;
            float distFromRight = raycastInDirection(transform, transform.right, out rightWall, out rightHit, raycastLenght, layerMask);
            float distFromLeft  = raycastInDirection(transform, -transform.right, out leftWall, out leftHit, raycastLenght, layerMask);

            if (distFromLeft > 0 && distFromLeft > distFromRight)
            {
                result.Success            = true;
                result.WallRunType        = WallRunType.LEFT;
                result.ColliderThatWasHit = leftWall.GetComponent <Collider> ();
                result.Distance           = distFromLeft;
                result.Hit       = leftHit;
                result.Direction = (leftHit.point - transform.position).normalized;
            }
            else if (distFromRight > 0 && distFromRight > distFromLeft)
            {
                result.Success            = true;
                result.WallRunType        = WallRunType.RIGH;
                result.ColliderThatWasHit = rightWall.GetComponent <Collider> ();
                result.Distance           = distFromRight;
                result.Hit       = rightHit;
                result.Direction = (rightHit.point - transform.position).normalized;
            }

            wallRunRaycastResult = result;
            return(result.Success);
        }