被命中的碰撞器的实例 ID。
提供对被命中的碰撞器的引用,以便从任务中访问。有关创建任务的详细信息,请参阅创建任务。
using Unity.Collections; using Unity.Jobs; using UnityEngine;
public class BatchExample : MonoBehaviour { public struct CollisionJob : IJob { public int colliderID; public NativeArray<RaycastHit> results;
public void Execute() { // This is where we check what we collided with and do any appropriate actions // If you tried accessing RaycastHit.collider you would get an error if (colliderID == results[0].colliderInstanceID) Debug.Log("Detected the a hit with the requested collider"); } } void Start() { // We create the raycast command buffer and an array to store the RaycastHits NativeArray<RaycastCommand> commands = new NativeArray<RaycastCommand>(1, Allocator.TempJob); NativeArray<RaycastHit> results = new NativeArray<RaycastHit>(1, Allocator.TempJob);
var boxCollider = new GameObject().AddComponent<BoxCollider>();
// Create a new command for the buffer, pointing at the collider we created commands[0] = new RaycastCommand(Vector3.up * 2, Vector3.down);
// Schedule the commands in the buffer and store results in the 'results' array var batchHandle = RaycastCommand.ScheduleBatch(commands, results, 1, 1);
// This job is for doing something on the other thread when the collider of interest was hit var job = new CollisionJob(); job.colliderID = boxCollider.GetInstanceID(); job.results = results;
//Schedule the job to start after batchHandle has finished var jobHandle = job.Schedule(batchHandle); jobHandle.Complete();
commands.Dispose(); results.Dispose(); } }