如何允许对象在对撞机内移动?

How to allow an object to move within a collider?

我想要一个只能被推入矩形对撞机内部的方块angular。玩家必须能够穿过对撞机才能推动方块。我试图影响块被推入边缘对撞机时的质量、阻力、angular 阻力、速度、isKinematic 但当立方体撞击对撞机时,没有什么能阻止立方体移动。这真的很令人困惑,任何帮助都将不胜感激......这是代码:

public class pushBlock2 : MonoBehaviour {

    public Rigidbody2D pBlock2;


    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "edge") {
            Debug.Log ("pushblock2 touched edge");
            pBlock2.isKinematic = true;
            pBlock2.isKinematic = false;
        }
    }
    void OnTriggerStay2D(Collider2D col)
    {
        if (col.tag == "edge") {
            pBlock2.isKinematic = true;
        }
    }

您为什么不尝试在要移动块的区域周围创建四个碰撞体?这样你就必须阻止块进入那些比试图阻止项目离开对撞机更容易的任务。

我很确定你不需要任何代码就可以完成这个,你只需要设置几个静态碰撞器来与特定层上的对象碰撞并将你想要移动的立方体放在该层上.

有关 Layer-based 碰撞的更多信息可在此处找到:http://docs.unity3d.com/Manual/LayerBasedCollision.html

据我了解,您正在尝试使用对撞机定义的体积作为运动的分隔符。我假设当对象试图超出所述体积时,您也希望发生 "realistic" 碰撞。既然如此,这恐怕是不可能的。

整个物理模拟都是通过假设一些规则来进行的。每当两个对撞机相交时,物理学会遵循两个物体不应占据相同 space 的规则(就像现实世界一样),因此它会再次尝试弄清楚如何将它们分开。

您可以通过使用一组定义空心物体(例如桶或盒子)的碰撞体来解决这个问题,但您更有可能关闭盒子的物理模拟并使用您自己的算法如果需要一致的行为。

游戏中的很多东西其实都是"fake"行为。也许你可以通过伪造物理或伪造碰撞来实现你想要的?