我正在使用混合现实工具套件为Hololens开发一个Unity 2017场景,我希望自场景开始以后将所有物体放置在墙壁或地板的不同部分。
我已经知道如何使用水龙头将物体放置在环境中,但我希望它能够分析空间并根据房间的形状将物体放置在墙壁或地板上。
谢谢!
答案 0 :(得分:2)
您需要查看Spacial Understanding的MixedRealityToolkit部分(在README中链接的Unity程序包下载)。
我只是简单地玩过它,因为它不适合我正在处理的项目,但有一些可以轻松定位的getting started资源。
该软件包允许设备扫描固定的卷空间(让用户决定用于应用程序的周围环境的哪些部分),作为开发人员,您可以指定应用程序所需的最小卷大小。扫描后,随着Spacial Understanding开始分析扫描区域,可以使用多个查询功能,允许您作为开发人员查找平台,墙壁,地板等,以便您可以将对象放置在适当的位置:
以下对象放置查询正在寻找一个将半米立方体放置在曲面边缘上的位置,远离其他先前放置的对象并靠近房间的中心。
List<ObjectPlacementRule> rules =
new List<ObjectPlacementRule>() {
ObjectPlacementRule.Create_AwayFromOtherObjects(1.0f),
};
List<ObjectPlacementConstraint> constraints =
new List<ObjectPlacementConstraint> {
ObjectPlacementConstraint.Create_NearCenter(),
};
Solver_PlaceObject(
“MyCustomObject”,
new ObjectPlacementDefinition.Create_OnEdge(
new Vector3(0.25f, 0.25f, 0.25f),
new Vector3(0.25f, 0.25f, 0.25f)),
rules.Count,
UnderstandingDLL.PinObject(rules.ToArray()),
constraints.Count,
UnderstandingDLL.PinObject(constraints.ToArray()),
UnderstandingDLL.GetStaticObjectPlacementResultPtr());
如果成功,则返回包含放置位置,尺寸和方向的“ObjectPlacementResult”结构。此外,放置将添加到dll的已放置对象的内部列表中。后续放置查询将考虑此对象。 Unity示例中的“LevelSolver.cs”文件包含更多示例查询。