【问题标题】:Is there a way to have an object only collide with certain Tilemaps in Unity?有没有办法让对象只与 Unity 中的某些 Tilemap 发生碰撞?
【发布时间】:2020-08-20 02:47:58
【问题描述】:

我想让某些对象只与某些统一的瓷砖地图发生碰撞。例如,我有一个玩家,我希望能够更改他的对撞机与之交互的瓦片地图。当他在地面上时,我希望他与水交互并且不能进入水中,但是当我在船上时,我不想与水贴图碰撞,而是与地面贴图碰撞。有没有办法做到这一点?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您可以将水和地面分开的瓷砖地图,并通过脚本启用它们的瓷砖地图碰撞器组件。请按照以下步骤在现有脚本中包含此功能,以处理玩家进入船只:

    首先,在顶部包含 Unity Tilemap:

    using UnityEngine.Tilemaps;
    

    然后声明tilemap collider变量:

    [SerializeField] TilemapCollider2D groundCollider = null;
    [SerializeField] TilemapCollider2D waterCollider = null;
    

    在玩家上船时调用的方法内部:

    groundCollider.enabled = false;
    waterCollider.enabled = true;
    

    然后每当玩家离开船时做相反的事情:

    groundCollider.enabled = true;
    waterCollider.enabled = false;
    

    别忘了将 tilemap collider 组件拖到编辑器中的脚本变量中,一切顺利。

    【讨论】:

    • 我喜欢这个主意。唯一的问题是我在地面和水中都使用高级规则图块,这样我就可以在游戏中操纵图块(即在与水相邻的图块上挖掘以扩大水)并且它们必须相同tilemap,以便地面和水采用正确的瓷砖。我想我可能只需要使用光线投射并跟踪播放器周围的图块。
    • 听起来你的情况比我想象的要复杂。 Raycast 可能是您的最佳选择。
    猜你喜欢
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多