普通的射线检测
void Update()
{
bool didHitYa = Physics.Raycast(cameraTransform.position, cameraTransform.forward, out RaycastHit raycastHit, 100);
if (didHitYa)
{
Debug.Log($"======{raycastHit.collider}======");
}
}
使用 RaycastCommand进行射线检测
public class RayTest : MonoBehaviour
{
public Transform cameraTransform;
NativeArray<RaycastCommand> mRaycastCommand;
NativeArray<RaycastHit> mRaycastHit;
JobHandle mJobHandle;
void Start()
{
mRaycastCommand = new Unity.Collections.NativeArray<RaycastCommand>(1, Unity.Collections.Allocator.Persistent);
mRaycastHit = new NativeArray<RaycastHit>(1, Allocator.Persistent);
}
// Update is called once per frame
void Update()
{
mJobHandle.Complete();
RaycastHit raycastHit = mRaycastHit[0];
bool didHitYa = raycastHit.distance > 0;
if (didHitYa)
{
Debug.Log($"======{raycastHit.collider}======");
}
mRaycastCommand[0] = new RaycastCommand(cameraTransform.position, cameraTransform.forward);
mJobHandle = RaycastCommand.ScheduleBatch(mRaycastCommand, mRaycastHit, 1);
}
private void OnDestroy()
{
mJobHandle.Complete();
mRaycastCommand.Dispose();
mRaycastHit.Dispose();
}
}