Visual Studio VR中的捕捉交互

7eumitmz  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(115)

我手里有个装置。我想将我手中的这个设备拍到VR场景中目标物体的表面。我正在使用SteamVR插件。当我将设备靠近目标对象时,设备将捕捉到目标对象。我想在目标的表面上横向移动它,而不允许它穿透表面。捕捉工作正常,但捕捉不正确。我是这方面的初学者,需要帮助。- 谢谢你-谢谢
我希望它像这样(见下图),我希望能够在表面上横向移动它。enter image description here
它现在是如何捕捉的:enter image description here设备是抢购在一个错误的方式,也penerates表面,即使我已经使用碰撞器。我使用以下脚本进行捕捉并将其附加到设备gameobject。

public class SnapToSurface : MonoBehaviour
{
    public bool ShouldSnap = false;

    // Assign your vr controller to this.
    public Transform HandToTrack;

    // The collider of the surface object you want to snap to.
    public Collider SurfaceToSnapTo;
    public float snapDistance = 0.1f; // The distance at which snapping should be enabled
    public Rigidbody rb;
    public float snapHeightOffset = 0.01f; // Offset to snap slightly above the surface
   
    private Vector3 initialPosition; // Initial position of the dermatoscope for resetting

    private void Update()
    {
        Vector3 p = SurfaceToSnapTo.ClosestPoint(HandToTrack.position);
        float d = Vector3.Distance(p, HandToTrack.position);
       
            if (ShouldSnap)
            {
                if (d < snapDistance)
                {
                    Debug.Log("Enters");
                    // Calculate the closest point on the mesh collider.
                    Vector3 closestPoint = SurfaceToSnapTo.ClosestPoint(HandToTrack.position);

                    

                    // Snap the device to the target surface with the desired height offset
                    this.transform.position = closestPoint + (SurfaceToSnapTo.transform.up * snapHeightOffset);
                    // Align the rotation of the device with the VR controller
                    
                    float rotY = HandToTrack.localEulerAngles.y;
                    float rotX = HandToTrack.localEulerAngles.x;
                    float rotZ = HandToTrack.localEulerAngles.z;
                    this.transform.localEulerAngles = new Vector3(rotX, rotY, rotZ);
                    rb.isKinematic = true;
                   
                    

            }
                else 
                {
                    rb.isKinematic = false;
                    
                }
            }
        
    }
   
}

字符串

gcuhipw9

gcuhipw91#

你能在场景视图中提供一个设备游戏对象的屏幕截图,以及它在层次结构中的结构吗?我很想知道它的支点在哪里,就像这条线
第一个月
将设备定位到曲面上(具有偏移距离),但将轴点设置为对象的中心,从而使设备沉入曲面。

qxgroojn

qxgroojn2#

您可以将设备模型 Package 在一个空的游戏对象下,并将脚本附加到它。请参见下面的屏幕截图。该空GO的位置将是枢轴点。(请记住将控制柄工具从“中心”切换到“枢轴”,以在场景视图中显示Gizmo)
然后,您可以调整其下的设备模型的变换,而不会影响轴的位置。
这是为对象设置轴的一种非常常见的方法。
Screenshot-pivot-wrapper

相关问题