dataRequest | 用于烘培指定表面的请求数据包。 |
onDataReady | 烘培完此表面后调用的回调。 |
bool 如果请求失败,则返回 false,失败的原因通常是指定了无效的表面 ID。
调用 RequestMeshAsync 可启动特定表面网格数据的烘培流程。系统可能需要用多个帧才能生成此数据。系统将通过指定的 SurfaceDataReadyDelegate 提供烘培数据。如果 dataRequest 中指定的参数无效,此方法将抛出 ArgumentNullExcpetion 和 ArgumentException。
如果要绘制 RequestMeshAsync 返回的网格,建议您禁用阴影投射并在 MeshRenderer 上获得阴影,以提高性能。
using UnityEditor; using UnityEngine; using UnityEngine.XR.WSA;
public class ExampleScript : MonoBehaviour { // Request a new Surface's data given the SurfaceId and the SurfaceObserver. void RequestMeshData(SurfaceId id, SurfaceObserver observer) { // create a new GameObject to hold the new Surface with all the appropriate components GameObject newSurface = new GameObject("Surface-" + id.handle);
// fill out the SurfaceData struct in order to call RequestMeshAsync SurfaceData sd; sd.id = id; sd.outputMesh = newSurface.AddComponent<MeshFilter>(); sd.outputAnchor = newSurface.AddComponent<WorldAnchor>(); sd.outputCollider = newSurface.AddComponent<MeshCollider>(); sd.trianglesPerCubicMeter = 300.0f; sd.bakeCollider = true;
// make the request if (observer.RequestMeshAsync(sd, NewSurfaceBaked)) { // New surface request is in the queue and the specified callback will be invoked at a later frame. } else { // New surface request has failed. No callback for this request will be issued. } }
void NewSurfaceBaked(SurfaceData sd, bool outputWritten, float elapsedBakeTimeSeconds) { if (outputWritten) { // Request completed successfully } else { // Request has failed. } } }