C# 使用全息镜头从场景开始将对象放置到墙上

C# 使用全息镜头从场景开始将对象放置到墙上,c#,unity3d,hololens,C#,Unity3d,Hololens,我正在用Hololens的混合现实工具包开发一个场景un Unity 2017,我想从场景开始就将所有对象放置在墙壁或地板的不同部分 我已经知道如何使用tap在环境中放置对象,但我希望它能够分析空间,并根据房间的形状将对象放置在墙上或地板上 谢谢 您需要去看看的部分(自述文件中链接了Unity软件包下载) 我只是简单地玩了一下,因为它不适合我正在进行的项目,但是有一些容易定位的资源 该软件包允许设备扫描固定的卷空间(让用户决定应用程序使用其周围的哪些部分),作为开发人员,您可以指定应用程序所需的

我正在用Hololens的混合现实工具包开发一个场景un Unity 2017,我想从场景开始就将所有对象放置在墙壁或地板的不同部分

我已经知道如何使用tap在环境中放置对象,但我希望它能够分析空间,并根据房间的形状将对象放置在墙上或地板上


谢谢

您需要去看看的部分(自述文件中链接了Unity软件包下载)

我只是简单地玩了一下,因为它不适合我正在进行的项目,但是有一些容易定位的资源

该软件包允许设备扫描固定的卷空间(让用户决定应用程序使用其周围的哪些部分),作为开发人员,您可以指定应用程序所需的最小卷大小。扫描后,随着Spatial Understanding开始分析扫描区域,许多查询功能变得可用,允许您作为开发人员查找平台、墙壁、地板等,以便将对象放置在适当的位置:

下面的对象放置查询正在寻找一个位置,以便将半米立方体放置在曲面边缘上,远离其他先前放置的对象,靠近房间中心

列表规则=
新名单(){
ObjectPlacementRule。从其他对象(1.0f)创建,
};
列表约束=
新名单{
ObjectPlacementConstraint.Create_NearCenter(),
};
解算器放置对象(
“MyCustomObject”,
新建ObjectPlacementDefinition.Create_OneEdge(
新矢量3(0.25f,0.25f,0.25f),
新矢量3(0.25f,0.25f,0.25f)),
规则,伯爵,
理解dll.PinObject(rules.ToArray()),
限制,计数,
了解dll.PinObject(constraints.ToArray()),
了解dll.GetStaticObjectPlacementResultPtr());
如果成功,将返回包含放置位置、尺寸和方向的“ObjectPlacementResult”结构。此外,放置将添加到dll的内部放置对象列表中。后续的放置查询将考虑此对象。Unity示例中的“LevelSolver.cs”文件包含更多示例查询


您需要查看的部分(自述文件中链接了Unity软件包下载)

我只是简单地玩了一下,因为它不适合我正在进行的项目,但是有一些容易定位的资源

该软件包允许设备扫描固定的卷空间(让用户决定应用程序使用其周围的哪些部分),作为开发人员,您可以指定应用程序所需的最小卷大小。扫描后,随着Spatial Understanding开始分析扫描区域,许多查询功能变得可用,允许您作为开发人员查找平台、墙壁、地板等,以便将对象放置在适当的位置:

下面的对象放置查询正在寻找一个位置,以便将半米立方体放置在曲面边缘上,远离其他先前放置的对象,靠近房间中心

列表规则=
新名单(){
ObjectPlacementRule。从其他对象(1.0f)创建,
};
列表约束=
新名单{
ObjectPlacementConstraint.Create_NearCenter(),
};
解算器放置对象(
“MyCustomObject”,
新建ObjectPlacementDefinition.Create_OneEdge(
新矢量3(0.25f,0.25f,0.25f),
新矢量3(0.25f,0.25f,0.25f)),
规则,伯爵,
理解dll.PinObject(rules.ToArray()),
限制,计数,
了解dll.PinObject(constraints.ToArray()),
了解dll.GetStaticObjectPlacementResultPtr());
如果成功,将返回包含放置位置、尺寸和方向的“ObjectPlacementResult”结构。此外,放置将添加到dll的内部放置对象列表中。后续的放置查询将考虑此对象。Unity示例中的“LevelSolver.cs”文件包含更多示例查询

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());