GameObject Prefabs飘走

时间:2016-09-30 18:18:27

标签: unity3d

我有两个球形游戏对象作为预制件。他们附有刚体。我希望它们保持在一个表面上,但当它们发生碰撞时相互作用(相互推动,相互反弹,等等)。但是,在游戏视图中,当我拖入一个预制件时,刚体"使用重力"复选框关闭,对象飘走!我不想这样,所以我打开了#34;使用重力。"现在,他们被置于场景中,但仍然需要很长时间才能安顿下来,当我拖着他们时,他们仍然可以在那里漂浮。我如何让他们留在表面但相互影响?

我尝试过像

这样的事情
(Get-the-GameObject).GetComponent<Rigidbody>().velocity = Vector3.zero; 

但这并没有做任何事情。

在图片中,您可以看到我已将球体放在地板上,但它已经漂浮了!在物理编辑器中,重力设置为-9.81的Y分量。

编辑:我已经将我的球体的比例缩小到大约5,并且它会下降到地板并开始向左滑动。地板没有任何倾斜,所以我想知道为什么它现在滑动......

编辑:

通过单击具有所需颜色的框并将其拖动到桌面空间并释放来实例化球体。一旦释放,它就会开始漂浮/滑动。这是执行此操作的代码。

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);
    }
}

enter image description here

编辑2:描述正在发生的事情的最佳方式是我提供视频。点击此处:https://vimeo.com/185419058

我单击一个带有原子的框,按住鼠标按钮将其拖动到桌面区域并释放以放下它。但是,当我拖动时,即使我的鼠标静止,视频也会显示原子像疯了一样弹跳。然后,当我释放时,它开始滑动。我只想点击,拖动并将其放置在一个位置,而不会获得所有这些疯狂的效果。如果我在所有预制原子上移除刚体,这就是我想要的。但是,我希望能够使用刚体,因为我希望原子在相互接近时进行相互作用。

1 个答案:

答案 0 :(得分:2)

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

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

  

鼠标停止时,每帧都会调用OnMouseDrag。

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDrag.html

OnMouseDrag()中,您使用transform.position设置位置,这是一种非物理方法。我建议您尝试Rigidbody.MovePosition()Rigidbody.position。我还没有尝试过,我常常喜欢编写自己的物理模拟,因为Unity很难。

https://docs.unity3d.com/ScriptReference/Rigidbody-position.html

https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html

如果这不能解决您的问题,您可以尝试关闭rigidbodyrigidbody.enabled = false,同时OnMouseDrag()有效以避免冲突,当您释放鼠标时,将其重新打开以将控制权返回给物理引擎。