Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 游戏对象预设漂浮在远处_Unity3d - Fatal编程技术网

Unity3d 游戏对象预设漂浮在远处

Unity3d 游戏对象预设漂浮在远处,unity3d,Unity3d,我有两个球体游戏对象作为预置。它们连着刚体。我希望它们保持在表面上,但在碰撞时相互作用(相互推动,相互反弹,诸如此类)。然而,在游戏视图中,当我拖动一个预置,并且刚体的“使用重力”复选框被关闭时,对象就会飘走!我不想这样,所以我打开了“使用重力”。现在,它们被放置在场景中,但仍然需要很长时间才能固定在地板上,当我拖动它们时,它们仍然可以在那里漂浮。我怎样才能让它们停留在表面上,并相互影响 我试过做类似的事情 (Get-the-GameObject).GetComponent<Rigidbo

我有两个球体游戏对象作为预置。它们连着刚体。我希望它们保持在表面上,但在碰撞时相互作用(相互推动,相互反弹,诸如此类)。然而,在游戏视图中,当我拖动一个预置,并且刚体的“使用重力”复选框被关闭时,对象就会飘走!我不想这样,所以我打开了“使用重力”。现在,它们被放置在场景中,但仍然需要很长时间才能固定在地板上,当我拖动它们时,它们仍然可以在那里漂浮。我怎样才能让它们停留在表面上,并相互影响

我试过做类似的事情

(Get-the-GameObject).GetComponent<Rigidbody>().velocity = Vector3.zero; 

编辑2:描述正在发生的事情的最好方式是我提供一个视频。链接此处:


我点击一个带有原子的盒子,按住鼠标按钮将它拖到办公桌区域,然后松开它将其放下。然而,当我拖动时,视频显示,即使我的鼠标静止不动,原子也会疯狂地反弹。然后,当我释放时,它开始四处滑动。我只想点击,拖动,并把它放在一个位置,而不会得到所有这些疯狂的效果。如果我移除所有预制原子上的刚体,我希望这样做。然而,我希望能够使用刚体,因为我希望原子在彼此接近时相互作用。

因为你试图控制一个在物理引擎控制下的物体。就像一个帝国有两个国王一样,很明显会有战争或冲突

让我们更进一步,物理引擎会在每一个FixeUpdate()更新一次,默认设置为0.02s,并且每一帧都会执行OnMouseDrag()

鼠标按下时,每帧调用OnMouseDrag

在您的
OnMouseDrag()
中,您正在使用
transform.position
设置位置,这是一种非物理方法。我建议你试试
刚体.MovePosition()
刚体.position
。我还没试过,我经常喜欢自己写物理模拟,因为Unity是个疯子


如果这不能解决您的问题,您可以尝试关闭
rigidbody
rigidbody.enabled=false
,而
OnMouseDrag()
有效地避免冲突,当您释放鼠标时,重新启用该选项可将控制权返回物理引擎。

因为您正试图控制一个受物理引擎控制的对象。就像一个帝国有两个国王一样,很明显会有战争或冲突

让我们更进一步,物理引擎会在每一个FixeUpdate()更新一次,默认设置为0.02s,并且每一帧都会执行OnMouseDrag()

鼠标按下时,每帧调用OnMouseDrag

在您的
OnMouseDrag()
中,您正在使用
transform.position
设置位置,这是一种非物理方法。我建议你试试
刚体.MovePosition()
刚体.position
。我还没试过,我经常喜欢自己写物理模拟,因为Unity是个疯子


如果这不能解决您的问题,您可以尝试关闭
rigidbody
rigidbody.enabled=false
,而
OnMouseDrag()
实际上是为了避免冲突,当您释放鼠标时,将其重新打开以将控制权返回到物理引擎。

对象相对于世界比例的比例是多少?如果它们是巨大的,那么重力的任何影响都会显得有点“漂浮”。我的球体的刻度在40-50之间。还有其他脚本控制球体的运动吗?我们可以看到球体的场景层次结构/属性吗?当然,我已经编辑了我的问题。除了比例/大小,还有不同曲面(物理材质)的反弹、刚体的质量/插值/拖动等,以及其他影响“物理属性”的设置。如果问题仍然存在,您应该了解所有这些并共享所有设置(编辑:并且您应该在FixeUpdate()中执行所有“物理相关”操作)。相对于世界比例,对象的比例是多少?如果它们是巨大的,那么重力的任何影响都会显得有点“漂浮”。我的球体的刻度在40-50之间。还有其他脚本控制球体的运动吗?我们可以看到球体的场景层次结构/属性吗?当然,我已经编辑了我的问题。除了比例/大小,还有不同曲面(物理材质)的反弹、刚体的质量/插值/拖动等,以及其他影响“物理属性”的设置。如果问题仍然存在,您应该了解所有这些并共享所有设置(编辑:并且您应该在FixeUpdate()中执行所有“物理相关”操作)使用
刚体.MovePosition
对我不起作用,但您建议关闭
刚体
并在使用常规
变换时完全重新启用它。position
移动有效!注意:禁用
刚体
需要将
iskinetic
设置为true,反之亦然。现在一切都好了!我可以单击来实例化一个新的atom,将它拖到适当的位置,释放它,它会很好地落下并保持在那里。对我来说,完美的答案。是的,我忘记了一件事,移动物体时禁用刚体会导致系统严重过热,因为它假设没有刚体的碰撞器是静态碰撞器(不会移动)。切换IsKinetic更好:D@noblerare这些是原子!美好的发布标题时请通知我;)使用
刚体.MovePosition
对我不起作用,但您建议关闭
刚体
并在使用常规
变换时完全重新启用它。position
移动有效!注意:禁用
刚体
需要将
iskinetic
设置为true,反之亦然。
void OnMouseDown()
{
    clone = (GameObject)Instantiate(prefab_to_instatiate, hit.point, Quaternion.identity);
}

void OnMouseDrag()
{
    // Code to make an atom follow the mouse cursor
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    RaycastHit hit2;
    if(Physics.Raycast(ray, out hit2, Camera.main.farClipPlane))
    {
        float oldY = transform.position.y;
        clone.transform.position = new Vector3(hit2.point.x, oldY, hit2.point.z);
    }
}