【问题标题】:Moving and scaling an object according to hand position根据手的位置移动和缩放对象
【发布时间】:2018-09-30 23:10:39
【问题描述】:

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

    提前谢谢你。

【问题讨论】:

    标签: c# unity3d hololens mrtk


    【解决方案1】:

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

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

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

    【讨论】:

    • 1.我不知道 MRTK 2017.2.1.4 现在才知道。我会试试看。您能否澄清一下 BoundingBox 代码如何替换 TapToPlace 代码?我试图找到它的文档,但找不到任何东西。
    • 1.您的意思是通过使用手势手动操作对象来缩放对象的两只手调整大小/缩放吗?我需要的是在检测到时自动缩放到我手位置的对象。
    • 2.我的对象是绿色的,带有组件-> R:0,G:255,B:0,A:255。我检查了亮度,它被调到最大。我正在使用标准着色器,但在 MRTK 中找不到标准着色器。任何帮助在哪里可以找到它?
    • 4.是的,枢轴是居中的。你能给我一个关于如何将枢轴点设置到线圈底部的提示吗?请原谅我的愚蠢问题,因为我是 HoloLens 开发的新手并且不太了解。谢谢。
    • 1.它不会以相同的方式点击放置,而更像是一个拖拉的东西。我的意思是它可以作为可以缩放和移动对象的示例很有用,因为 1 似乎是关于两种类型的变换不能很好地协同工作。您需要一个单独的特定问题来解决将代码放在一起的特定问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多