首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“运动学”的作品在HoloLens上有所不同?

为什么“运动学”的作品在HoloLens上有所不同?
EN

Stack Overflow用户
提问于 2020-08-26 07:51:55
回答 1查看 288关注 0票数 0

概述

我想要一个立方体,这样我可以用组件ColliderRigidbodyObjectManipulator来拖动场景。在游戏模式下一切正常工作,但运行它在全息透镜,立方体开始飞行后,拖了几次。

复制的步骤(所有组件都是通过编辑器而不是通过代码设置的)

  1. 创建新项目并将其设置为AR/全息透镜
  2. 进口MRTK 2.4
  3. 使用Box Collider创建多维数据集。设置Is Trigger = true
  4. Rigidbody添加到多维数据集。设置Use Gravity = falseIs Kinematic = true
  5. Object Manipulator添加到多维数据集。我有一个在On Manipulation Ended之后被调用的方法,但是不知道这是否重要。

期望行为

刚体设置为Is Kinematic = trueUse Gravity = false,以便多维数据集在释放后保持静止/停止移动。这是在统一游戏模式中进行尝试的过程。但是在全息透镜上运行它,这个立方体的行为就像Is Kinematic = false一样,并且在与它交互后开始飞行。有时在第二次拖动之后,有时在第三次拖动之后。

误差

在更新这篇文章之前,我没有注意到我的全息镜头左下角的开发控制台。在场景开始的时候,我收到了消息[Physics.PhysX] BV4 midphase only supported on intel platforms,但是在那一刻一切都很好。当立方体开始旋转时,我得到了一个NullReferenceExeption: Object reference not set to an instance of an object

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 13:53:41

我解决了我的问题。我知道大概的原因,但我不完全理解。在OnManipulationEnded之后被调用的方法导致了这种情况。

  1. 我有一个列表,由OnTriggerEnter/-Exit填充和耗尽(除了添加→remove外,exit看起来是一样的):

私有空OnTriggerEnter(对撞机其他){ if (other.gameObject.layer != 31)返回;_objectsCollidingWith.Add(other.gameObject);}

  1. OnManipulationEnded触发了此方法:

GetMeshes(List> transMeshes){ foreach (GameObject go in _objectsCollidingWith) {transMeshes.Add(新KeyValuePair(go.transform,go.GetComponent().mesh));}foreach transMeshes.Count;}

所以我从GetMeshes获得了大量的空引用,因为列表_objectsCollidingWith中的一些游戏对象是空的。那是因为网格每隔一段时间就会更新一次。这导致了大量的空引用,直到立方体飞走。

我一直通过设备门户使用日志服务提供者,无法看出是什么导致了这个错误。但是在通过全息仿真运行了这个项目之后,我可以在控制台中看到他们来自哪里。

我是怎么解决我的问题的?

我找到这个帖子是因为我意识到我的OnTriggerExit没有被调用和大小写,有空对象和一些同名的空间网格经常触发OnTriggerEnter。另外,我在GetMeshes中的foreach循环中添加了这一行,因为偶尔仍然有一个空对象:

代码语言:javascript
复制
if (go == null)
  continue;

PS:请原谅奇怪的代码格式,这里的编辑器不允许我在其他地方放置括号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63592975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档