i have one main script which uses raycasts to do various actions depending on what object is clicked on. currently the objects you click on either have box or mesh colliders but these are very unreliable at picking up the click, or you have to be very specific where abouts you click on a large object.
Are you sure you have colliders setup? Why would a collider be unreliable at detecting a collision? That is effectively what you are doing with the raycast, sending out an invisible line and running a response dependant on what/if it hits. But there many ways to do this; through a RaycastHit or Debug.Log().