Search Unity

Physics2D.RaycastNonAlloc() vs Physics2D.RaycastAll()

Discussion in 'Physics' started by sharkyro, May 14, 2018.

  1. sharkyro

    sharkyro

    Joined:
    Mar 15, 2014
    Posts:
    127
    Hello everyone,

    I am using Unity 2018.1.0f2.

    According to the Unity Manual, Physics2D.RaycastNonAlloc() should work just like Physics2D.RaycastAll(), in terms of objects hit.

    I want to hit all 2D objects under the mouse cursor, when the Mouse0 is pressed:
    Code (CSharp):
    1. if(Input.GetMouseButton(0))
    2. {
    3.      hits = Physics2D.RaycastNonAlloc(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector3.forward, hit2Ds, 100f, targetLayer);
    4.  
    5.      newHitsVector = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector3.forward, 100f, targetLayer);
    6. }
    Strangely enough, the code above returns different results for the two Physics2D methods: RaycastAll() returns all objects hit (as expected), but RaycastNonAlloc() will never return more than 1 hit (if it hits something, it always returns 1, no matter how many objects are overlapping under the mouse cursor).

    There are no colliders at the starting point to interfere and the paramaters on both function calls are identical, as you can see. Am I missing something or is there a bug in Physics2D.RaycastNonAlloc()?

    Thank you and Best Regards,
    Alex.
     
  2. LaneFox

    LaneFox

    Joined:
    Jun 29, 2011
    Posts:
    6,435
    What is the size of
    hits2Ds
    and
    hits
    ?

     
    sharkyro likes this.
  3. sharkyro

    sharkyro

    Joined:
    Mar 15, 2014
    Posts:
    127
    Oh my God, I'm blind as a bat sometimes... The array size was supposed to be 10, but I typoed it in as RaycastHit2D[1] and completely missed it.

    That solved it. Many thanks for the help and sorry for troubling you.
     
    LaneFox likes this.