【问题标题】:Unity2D - Ignore collision with edge colliderUnity2D - 忽略与边缘碰撞器的碰撞
【发布时间】:2019-03-28 15:29:43
【问题描述】:

我试图让我的玩家忽略与我拥有的平台上的边缘对撞机的碰撞。

这是我添加到播放器的脚本

public class TestMovement : MonoBehaviour
{
public Rigidbody2D ball;
private GameObject purplePlat1;
private GameObject player;

// Start is called before the first frame update
void Start()
{
    purplePlat1 = GameObject.Find("purple_plat");
    player = GameObject.Find("circle-png-44659");

    ball = GetComponent<Rigidbody2D>();
    ball.AddForce(new Vector2(0, 10), ForceMode2D.Impulse);
    Debug.Log("start");
}

// Update is called once per frame
void Update()
{

}

void OnCollisionEnter2D(Collision2D collision)
{

    Physics2D.IgnoreCollision(purplePlat1.GetComponent<EdgeCollider2D> 
  (), GetComponent<CircleCollider2D>());
    Debug.Log("collision");

}
}

球仍在撞击平台。我已经确认 oncollisionenter 方法正在触发。

【问题讨论】:

  • 你应该把 IgnoreCollision 放在 Start() 中。在您将其设置为 false 之前,它一直有效。
  • on collision 是在发生碰撞时调用的,也就是说,来不及忽略。这就像告诉来你家的人不要来你家一样。他们已经在那里了。你需要在他们来之前告诉他们。

标签: unity3d collision-detection


【解决方案1】:

您可以使用 Unity 的layer 系统来避免两者之间的collisions。为玩家设置一个图层,为边缘设置另一个图层,并取消它们之间的碰撞。

【讨论】:

    【解决方案2】:

    您可以为不同类型的游戏对象创建图层蒙版。然后,打开您的 Physics2D 设置。

    在底部,您可以看到可以相互碰撞的物理对象矩阵。只需取消选中哪一层不应与另一层发生碰撞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多