Could you not just do "Physics.Raycast(crossHair.transform.position, Vector3.forward, out hit)"? Also what are you trying to hit? are these elements in 3D space on a different camera? or are they in 2D space with the same camera?
If they are on different cameras then using the uiCamera to generate the ray would be incorrect (i.e. it would need to be Ray ray =
MY3DCAMERA.ScreenPointToRay(uiCamera.WorldToScreenPoint(crossHair.transform.position))
