0

我的大学项目需要一些帮助。我有一个圆柱体,需要它作为线圈。例如,如果我触摸圆柱体的表面,它的高度会减小(在 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

    先感谢您。

4

1 回答 1

0

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

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

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

于 2018-04-20T13:57:47.397 回答