title: Unity3d Raycast not hitting mesh collider
body: <p>I have looked through the forums and nothing can explain or help with what is going on. I have been using Unity3d for the past 8 years and this one has me stumped. I have drawn the ray if the object is not hit and from this image you can see that its hitting it. Also I created a primitive sphere to see if i could drag the sphere along the red line and it does hit with scale being 1.</p>
  <p><a href="https://i.stack.imgur.com/mW0xo.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/mW0xo.png" alt="enter image description here" /></a></p>
  <p><a href="https://i.stack.imgur.com/56aPv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/56aPv.png" alt="enter image description here" /></a>
  <a href="https://i.stack.imgur.com/hNBvi.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/hNBvi.png" alt="enter image description here" /></a>
  Code below broke everything down to be simple</p>
  <pre><code>    public void CastRay()
      {
          var Cam = Camera.main; //added this in for stackoverflow completeness 
          var ray = new Ray(Cam.transform.position, Cam.transform.forward);
          if (Physics.SphereCast(ray, 1, out RaycastHit hit))
          {
              Debug.Log($&quot;HIT SOMETHING {hit.transform.name}&quot;);
          } else {
              Debug.DrawRay(ray.origin, ray.direction * 1000, Color.red, 20000);
          }
      }
  </code></pre>
  <p>this class is raised in my code to call the example code above</p>
  <pre><code>//usage ThreadCrossOver.Instance.RaiseAction(CastRay); &lt;-- called from else where
  public class ThreadCrossOver : MonoBehaviour
  {
      public static ThreadCrossOver Instance{
          get
          {
              if(instance == null)
              {
                  instance = FindObjectOfType&lt;ThreadCrossOver&gt;();
              }
              return instance;
      };
      private static ThreadCrossOver instance;        
      private readonly Queue&lt;Action&gt; actions = new Queue&lt;Action&gt;();
      private static readonly object it = new object();
  
      private void LateUpdate()
      {
          if (actions.Count == 0) return;
          while (actions.Count &gt; 0)
          {
              lock (it) actions.Dequeue().Invoke();
          }        
      }
      public void RaiseAction(Action action)
      {
          lock(it) actions.Enqueue(action);        
      }
  }
  </code></pre>