Version: 2020.1

RaycastCommand

struct in UnityEngine

切换到手册

描述

用于设置要在作业过程中异步执行的射线投射命令的结构。

使用此结构计划一批射线投射时,它们会以异步方式并行执行。射线投射的结果会写入结果缓冲区。由于结果是异步写入,因此在作业完成之前无法访问结果缓冲区。

命令缓冲区中索引 N 处的命令的结果会存储在结果缓冲区中索引 N * maxHits 处。

如果 maxHits 大于命令的实际结果数,则结果缓冲区会包含一些未命中任何对象的无效结果。第一个无效结果通过为 null 的碰撞体进行标识。第二个以及随后的无效结果不会由射线投射命令写入,因此其碰撞体不保证为 null。遍历结果时,循环应在发现第一个无效结果时停止。

另请参阅:Physics.RaycastPhysics.RaycastAll

using Unity.Collections;
using Unity.Jobs;
using UnityEngine;

public class Example : MonoBehaviour { private void RaycasExample() { // Perform a single raycast using RaycastCommand and wait for it to complete // Setup the command and result buffers var results = new NativeArray<RaycastHit>(1, Allocator.Temp);

var commands = new NativeArray<RaycastCommand>(1, Allocator.Temp);

// Set the data of the first command Vector3 origin = Vector3.forward * -10;

Vector3 direction = Vector3.forward;

commands[0] = new RaycastCommand(origin, direction);

// Schedule the batch of raycasts JobHandle handle = RaycastCommand.ScheduleBatch(commands, results, 1, default(JobHandle));

// Wait for the batch processing job to complete handle.Complete();

// Copy the result. If batchedHit.collider is null there was no hit RaycastHit batchedHit = results[0];

// Dispose the buffers results.Dispose(); commands.Dispose(); } }

变量

direction射线的方向。
distance射线应检查碰撞的最大距离。
from射线在世界坐标系中的起点。
layerMask用于在投射射线时有选择地忽略碰撞体的 LayerMask。
maxHits射线可以命中的最大碰撞体数。

构造函数

RaycastCommand创建 RaycastCommand。

静态函数

ScheduleBatch安排在一个作业中执行的一批射线投射。