【问题标题】:How can I remove small part of collider of game object in unity 2d如何在统一 2d 中删除游戏对象对撞机的一小部分
【发布时间】:2021-10-15 14:04:26
【问题描述】:

click here for gif show of what I want

我想在用户单击对象时删除对象的网格,并删除其对撞机以使另一个对象从该删除的网格区域掉落... 我从上个月开始使用unity,所以我没有太多经验和知识,请帮助我...

【问题讨论】:

  • 第一个问题...它是否需要是具有多个网格的单个对象(或一个已编辑的网格)?或者,您可以使用多个对象吗?使用网格进行此操作是可能的,但比仅拥有两个对象要复杂得多,其中一个对象会消失。此外,您的碰撞网格理想情况下应该比您用于渲染的分辨率低得多,所以您知道要删除网格的哪些部分(哪些面/顶点)?
  • 我想做这张图片i.stack.imgur.com/8WQgq.gif
  • 好的,据我所知,您需要编辑碰撞网格。您是在 2D 还是 3D 中执行此操作?在运行时编辑网格并非易事。 Mesh 对象实际上只是一个点(顶点)和面(三角形)的数组。您的工作将是根据用户单击的位置确定要删除的顶点,以及如何重新缝合面以使网格在之后看起来仍然很好,而不会造成太多失真。这也可能涉及管理/修复纹理坐标 (UV)。这是一个很好的介绍:raywenderlich.com/3169311-runtime-mesh-manipulation-with-unity

标签: unity3d collision masking collider


【解决方案1】:

创建可破坏的地面粒子

实现 gif 中显示的内容的一种方法是创建一个预制件,例如一个圆形对撞机,在 gif 中的污垢区域实例化。它充当“地面粒子”并将物体保持在自身之上。 您在该区域中实例化了很多它们,因此它充当了一个大对撞机,尽管它实际上是一整套较小的对撞机。

实现交互逻辑并停用地面粒子

您实现了将鼠标拖动到地面粒子上并移除它们的功能。这也不难。将光线投射到鼠标所在位置的屏幕上(记得使用 Camera.ScreenToWorldPoint)并获取碰撞信息(请参阅https://docs.unity3d.com/ScriptReference/Collider2D.Raycast.html)。通过碰撞信息,您可以获得对地面粒子实例(raycasthit.other.gameobject)的引用,然后通过脚本(gameobject.setActive(false))将其禁用。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多