版本:Unity 6 (6000.0)
语言英文
  • C#

RaycastHit.colliderInstanceID

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交,但我们确实会阅读用户建议的每项更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,无法提交您建议的更改。请在几分钟后重试。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public int colliderInstanceID;

描述

被命中的碰撞器的实例 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(); } }