Exemple #1
0
        public static bool RayCast(Fix64Vec3 start, Fix64Vec3 end, int mask, out PRaycastHit3D raycastHit3D)
        {
            if (!initialized)
            {
                Initialize();
            }

            raycastHit3D = new PRaycastHit3D();

            if (Fix64Vec3.Distance(start, end) < ParallelConstants.SMALLEST_RAYCAST_RANGE)
            {
                Debug.Log("RayCast range too short");
                return(false);
            }

            Fix64Vec3 point    = Fix64Vec3.zero;
            Fix64Vec3 normal   = Fix64Vec3.zero;
            Fix64     fraction = Fix64.one;

            raycastHit3D = new PRaycastHit3D();
            UInt16 bodyID = 0;

            bool hit = NativeParallel3D.RayCast(start, end, mask, ref point, ref normal, ref fraction, ref bodyID, internalWorld.IntPointer);

            if (hit)
            {
                raycastHit3D.point    = point;
                raycastHit3D.normal   = normal;
                raycastHit3D.fraction = fraction;
                if (bodyDictionary.ContainsKey(bodyID))
                {
                    raycastHit3D.rigidbody = bodyDictionary[bodyID].RigidBody;
                }
                else
                {
                    Debug.LogError($"Rigibody not found: {bodyID}");
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #2
0
 //raycast
 public static bool RayCast(Fix64Vec3 start, Fix64Vec3 direction, Fix64 range, out PRaycastHit3D raycastHit3D)
 {
     return(RayCast(start, start + range * direction, out raycastHit3D));
 }
Exemple #3
0
 public static bool RayCast(Fix64Vec3 start, Fix64Vec3 end, out PRaycastHit3D raycastHit3D)
 {
     return(RayCast(start, end, -1, out raycastHit3D));
 }