我手里有个装置。我想将我手中的这个设备拍到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;
}
}
}
}
字符串
2条答案
按热度按时间gcuhipw91#
你能在场景视图中提供一个设备游戏对象的屏幕截图,以及它在层次结构中的结构吗?我很想知道它的支点在哪里,就像这条线
第一个月
将设备定位到曲面上(具有偏移距离),但将轴点设置为对象的中心,从而使设备沉入曲面。
qxgroojn2#
您可以将设备模型 Package 在一个空的游戏对象下,并将脚本附加到它。请参见下面的屏幕截图。该空GO的位置将是枢轴点。(请记住将控制柄工具从“中心”切换到“枢轴”,以在场景视图中显示Gizmo)
然后,您可以调整其下的设备模型的变换,而不会影响轴的位置。
这是为对象设置轴的一种非常常见的方法。
Screenshot-pivot-wrapper