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); }
public PlayerWallRunState(WallRunRaycastResult hitResult) : base() { this.hitResult = hitResult; collider = hitResult.ObjectThatWasHit.GetComponent <Collider>(); IsActive = false; parameters = CharacterControllerParameters.Instance; }
/// <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); }