【问题标题】:Unity2D Tilemap Collision IssuesUnity2D Tilemap 碰撞问题
【发布时间】:2018-01-25 08:18:25
【问题描述】:

我正在开发一款游戏并使用新的 Tilemap 功能。到目前为止,他们的工作非常出色。很容易掀起一个水平。但是,在瓷砖地图对撞机上反射激光时,我遇到了问题。正如您在下面的 GIF 中看到的,前几束激光反射良好,但有时在对撞机相遇的小裂缝中,我的激光会出现不良行为。

激光由一个小的颗粒精灵渲染器对象组成,后面有一个用于颜色的轨迹渲染器和一个圆形碰撞器。

这是我的碰撞代码。其中direction 是Vector2 类变量,rb 是隐藏在Start() 函数中的GameObject 的RigidBody2D 组件。

if (collision.collider.gameObject.layer == LayerMask.NameToLayer ("Terrain")) {
    direction = Vector2.Reflect (direction, collision.contacts[0].normal);
    rb.velocity = direction.normalized*GameManager.instance.bouncySpeed;
}

我可以采取哪些措施来避免这种行为?

【问题讨论】:

  • 您是否尝试过在您的 IF 上放置一个 ELSE 并在那里放置一个日志以查看条件是否返回 false(除了 Terrain 之外的其他图层)?

标签: unity3d unity5 unity3d-2dtools


【解决方案1】:

我认为条件返回真,因为激光被重定向。但是某些变量在某处是错误的。

尝试打印directioncollision.contacts[0].normalcollision.contacts.LengthGameManager.instance.bouncySpeedrb.velocity

if (collision.collider.gameObject.layer == LayerMask.NameToLayer ("Terrain")) {
    direction = Vector2.Reflect (direction, collision.contacts[0].normal);
    rb.velocity = direction.normalized*GameManager.instance.bouncySpeed;

    Debug.Log("////////");
    Debug.Log("direction: " + direction);
    Debug.Log("collision.contacts[0].normal: " + collision.contacts[0].normal);
    Debug.Log("collision.contacts.Length: " + collision.contacts.Length);
    Debug.Log("GameManager.instance.bouncySpeed: " + GameManager.instance.bouncySpeed);
    Debug.Log("rb.velocity: " + rb.velocity);
    Debug.Log("////////");
}

在工作和出现错误时比较这些值。如果您没有发现问题,也将它们发布在这里

【讨论】:

  • 感谢您的回复。事实证明,我可以使用 TileMap 游戏对象上的 Composite Collider 组件使所有对撞机成为单个对撞机。这为我解决了这些碰撞问题。再次感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多