根据手的位置移动和缩放对象

时间:2018-04-20 09:15:57

标签: c# unity3d hololens mrtk

我的大学项目需要一些帮助。我有一个气缸,需要它作为一个线圈。例如,如果我触摸圆柱体的表面,它的高度将减小(沿y方向缩放),就好像按下线圈一样,然后当我移开手时,它将恢复到原始尺寸。 这是我到目前为止所得到的,但我仍然有一些我无法解决的问题。

public class Deformation : MonoBehaviour
{

    Vector3 tempPos;

    private void InteractionManager_SourceUpdated(InteractionSourceUpdatedEventArgs hand)
    {
        if (hand.state.source.kind == InteractionSourceKind.Hand)
        {
            Vector3 handPosition;
            hand.state.sourcePose.TryGetPosition(out handPosition);

            float negXRange = transform.position.x - transform.localScale.x;
            float posXRange = transform.position.x + transform.localScale.x;
            float negYRange = transform.position.y - (transform.localScale.y / 2);
            float posYRange = transform.position.y + (transform.localScale.y / 2);
            float negZRange = transform.position.z - transform.localScale.z;
            float posZRange = transform.position.z + transform.localScale.z;

            float handX = handPosition.x;
            float handY = handPosition.y;
            float handZ = handPosition.z;

            if ((negXRange <= handX) && (handX <= posXRange) && (negYRange <= handY) && (handY <= posYRange) && (negZRange <= handZ) && (handZ <= posZRange))
            {
                tempPos.y = handPosition.y;
                transform.localScale = tempPos;
            }
            else
            {
                tempPos.y = 0.3f;
                transform.localScale = tempPos;
            }
        }
    }

    // Use this for initialization
    void Start()
    {
        tempPos = transform.localScale;

        InteractionManager.InteractionSourceUpdated += InteractionManager_SourceUpdated;
    }   
  1. 我将两个脚本附加到我的对象(柱面),来自HoloToolKit的TapToPlace脚本和上面描述的变形脚本。问题是当我部署到我的HoloLens进行测试时,当我将圆柱体首先放置到所需的位置然后尝试变形它之后,它被放置但没有变形。如果我尝试了它,那么两种方式都可以。任何想法为什么变形脚本在TapToPlace之后不起作用?
  2. 我的HoloLens观察时的圆柱体有些透明。我的意思是我可以看到我的手。我需要它更坚固。
  3. 我想知道是否有类似延迟的东西我可以使用,因为当我使用上面描述的变形脚本时,圆柱体缩放到我的手位置然后非常快地缩放回其默认尺寸并且看起来好像在闪烁。
  4. 首先我将圆柱放在一个设置上(例如桌子上的东西)然后我开始变形它。当我在上面描述的变形脚本中评论else部分时,它被缩放并保持稳定而不返回原始大小。它是对称缩放的,因此它的高度从上到下减小,导致圆柱体的底部远离桌子。我需要气缸的底座始终保持稳定并接触下面的工作台。

    注意:我使用的是Unity 2017.3.1f1(64位) - HoloToolkit-Unity-2017.2.1.3

    提前谢谢。

1 个答案:

答案 0 :(得分:0)

1)您是否看到了MRTK 2017.2.1.4版本?它具有一些有用的功能,例如双手调整大小/缩放对象。新MRTK版本中的BoundingBox代码在一个组件中移动和调整大小,它可能是比TapToPlace更好的基础,或者至少显示两种类型的转换如何一起工作。

2)你的物体是什么颜色的? Hololens将黑色渲染为透明,因此请尝试将对象设为亮白色以进行测试。此外,只需仔细检查亮度是否已满(Hololens上的LHS按钮)。最后,检查着色器是MRTK标准着色器。 (同样,2017.2.1.4版本有您可能想要尝试的新着色器代码。)。在没有阳光直射的房间里,它几乎要掩盖你的手。

4)我不确定我是否完全遵循,但枢轴点在这里可能很重要。如果它位于线圈中间的中心(正如我想象的那样),那么当你使线圈变形时,它仍将保持在中心枢轴点的中心位置。 如果您将枢轴点设置到线圈的底部,触摸桌子,您可以缩放并且该点保持在桌面上,顶部完成所有移动。