Unity Raycast开启了新的性能时代

普通的射线检测

 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();
    }
}

猜你喜欢

转载自blog.csdn.net/kill566666/article/details/126310981