如何让对象在对撞机内移动?

时间:2016-01-06 02:24:32

标签: c# object unity3d collision

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

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

2 个答案:

答案 0 :(得分:4)

为什么不尝试在要移动块的区域周围创建四个对撞机?这样你就不得不阻止阻挡物进入比试图防止物品离开对撞机更容易的任务。

我很确定你可以在没有任何代码的情况下完成此操作,你只需要设置几个静态对撞机与某些层上的对象发生碰撞,然后将要移动的立方体放在该层上。 / p>

有关基于图层的碰撞的更多信息,请访问:http://docs.unity3d.com/Manual/LayerBasedCollision.html

答案 1 :(得分:0)

我理解的方式,你试图使用对撞机定义的体积作为移动的分隔符。我想你在对象试图超出音量时也希望“逼真”的碰撞。既然如此,我担心这是不可能的。

整个物理模拟是通过假设一些规则来完成的。每当两个碰撞器相交时,物理学遵循两个物体不应占据相同空间的规则(就像现实世界一样),因此它将试图弄清楚如何再次将它们分开。

你可以通过使用一组定义空心物体的碰撞器来解决这个问题,例如一个桶或盒子,但你更有可能关闭盒子的物理模拟,如果一致的话就卷起你自己的算法行为是必要的。

游戏中的许多东西实际上都是“假的”行为。也许你可以通过伪造物理或伪造碰撞来达到你想要的效果?