问题标签 [mesh-collider]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unity3d - 我如何使相互吸引的对象不会在 Unity3D 中反弹到遗忘?
所以我正在尝试制作一个程序,允许一个领域中的小行星像这样相互吸引: https ://www.youtube.com/watch?v=iAWZwTWJmhM
我有两个程序可以做到这一点,一个随机生成小行星,另一个对每个物体施加引力。问题是小行星会随着它们越来越近而变得更快,直到它们达到子弹速度,并且施加的力使它们彼此远离并消失。有没有办法让他们在接触时抵消他们的力量。我尝试了 Rigidbody.isKinematic 但这使得小行星静止而不是像在太空中那样旋转。生病发布下面的代码,但这是我使用代码的两个项目。 https://www.youtube.com/watch?v=Ouu3D_VHx9o https://www.youtube.com/watch?v=6rTfZ2ox2_g
小行星产卵器的代码。我在随机比例生成器中添加了:
应用重力程序:
'''
'''
unity3d - Unity3D 碰撞器穿过其他碰撞器
问题:一些刚体对象上的网格对撞机正在穿过其他对象上的对撞机。
我尝试过的事情:
假设 A 是GameObject
带有附加物的 a,而 B 是带有对撞机RigidBody
的法线。GameObject
- 给 A 一个凸网格碰撞器
- 给 A 一个非凸网格碰撞器
- 给 B 一个凸网格碰撞器
- 给 B 一个非凸网格碰撞器
- 给 B 一个盒子对撞机
- 给 B 一个凸网格和盒子碰撞器
- 给 B 一个非凸网格和盒子碰撞器
- 调整刚体的重量
我已经在 A 和 B 的所有组合中尝试了所有这些。
此外,
- 碰撞器未标记为触发器
- 所有对象都在默认层 (0)
- 检查 isKinematic;这样做似乎使重力停止影响物体,所以我把它留作假。
约束:我希望 A 使用网格碰撞器,因为所涉及的大多数对象都比较复杂,并且将其他碰撞器安装到它们上需要一段时间。
奇怪的行为:我有一些具有刚体和凸网格碰撞器的对象,其中碰撞与非凸网格碰撞器一起工作正常。这与其他游戏对象不一致。这些对象具有所有相同的设置。
如果相关,我正在使用统一版本 2019.3.11f1。
使用的对象来自这个包。具体来说,抽屉上带有刚体的文件柜工作正常。桌子、办公椅、笔和打开的笔记本电脑都从“地板”(上面测试过所有碰撞器的立方体)掉了下来。
unity3d - 检测网格上图像大小与网格大小的不同方法
我正在创建一个益智游戏,它使用 2D 网格生成随机大小的碎片。图像包含透明部分,有时一块是完全透明的。我需要检测一块透明的百分比。我发现这样做的一种方法是逐像素进行。我在这里发布了我的解决方案。但是,这个过程在加载过程中增加了几秒钟,我想避免,我正在寻找其他想法
我考虑过使用 MeshCollider 的选择轮廓来以某种方式获得可以与网格的表面积进行比较的表面积,但我发现的一切都是使用专门的着色器渲染轮廓。有没有人有任何想法来解决这个问题?
c# - Unity地形对撞机间歇性丢失碰撞
我正在尝试使用地形工具。该应用程序有一个代表四轴飞行器的立方体 (0.2x0.2x0.05) 飞来飞去。它有一个对撞机(未设置为触发器)和刚体。它由 addforce() 等控制 - 即它的位置和旋转不会直接改变。
它在由基元(立方体、球体等)构建的场景中非常可靠地工作。
我现在正在试用 Unity 地形工具包(我正在使用编辑器 2019.3),并有一个带有岩石、碎石和沙层的简单测试地形(500x500m)。
我发现有时当它直接飞入地形只是为了检查会发生什么时,它会直接穿过。通常它会发生碰撞,但并非总是如此,也许是 50:50。
FixedUpdate() 速率是标准的 20mS。
我不确定我是否错过了任何步骤?我只是在地形上使用所有默认设置。它有标准的网格对撞机。它不只是作为触发器或任何东西设置的(无论如何,大多数情况下它都可以正常工作)。
这是我做过/没有做过的事情,还是这是一个已知问题 - 有解决方法吗?
停止按下:测试仍在进行中,但感觉这可能与刚体中选择的碰撞类型有关 - 请参阅下面的答案。
unity3d - Unity:我可以在运行时更改网格对撞机的形状吗?
我有一个根据用户输入更新其形状的网格,我怎样才能让对撞机匹配网格的新形状?
作为重要说明:网格始终是凸的(没有例外)。我看到为了让对撞机正常工作很重要。
我在这里找到了以下视频,但对撞机只是通过执行meshCollider.sharedMesh = null
然后为每一帧擦除和重新计算meshCollider.sharedMesh = updatedMesh
。
由于我已经在计算网格的每个顶点、边和三角形的位置,我是否可以将这些值用于网格对撞机?
c# - 检测 2d 碰撞侧行为怪异
我正在制作一个基本的 Breakout 游戏,并使用以下代码来检测 Capsule Collider 2d 和 circle collider 2d 之间的碰撞是否发生在顶部:
在大多数情况下,检测工作正常,但在运行游戏一段时间后,特别是在圆形对撞机进入非顶部碰撞之后,该方法似乎将所有碰撞返回为非顶部碰撞。
为了找出问题,我放置了打印语句,结果如下:
对撞机 0.2610874 顶部 0.2885695
碰撞 0.2610874 不是顶部 0.2552783第一次实际非顶部碰撞
碰撞 0.2610874 不是顶部 0.2542975这是顶部碰撞,但显示为非顶部
碰撞 0.2610874 不是顶部 0.2558844这是顶部碰撞,但显示为非顶部
并且会话的其余碰撞也是这样的错误,直到我重新启动游戏。
我不确定这里出了什么问题。
如果有更好的方法来检测碰撞侧,请告诉我。
c# - 不在对撞机中时未禁用消息
当玩家与 NPC 对撞机发生碰撞并且玩家未与 NPC 发生碰撞时,该消息被禁用时,我试图显示一条消息“按 E 与 NPC 交谈”。该消息确实会在碰撞时出现,但在没有碰撞时它不会被禁用我尝试了很多东西但似乎没有任何效果。任何人都可以帮忙吗?这是我的代码和我尝试过的一些事情:
unity3d - 在由多个对撞机组成的飞机上修复鬼碰撞?
基本问题:当玩家在由多个碰撞器组成的平面上移动时,Unity 的物理引擎会产生奇怪的碰撞。鬼碰撞发生在 Colliders 之间的关节处,并表现为两种行为:
根据 Bennett Foddy 的演讲,这似乎是一般物理引擎的问题:
https://www.youtube.com/watch?v=NwPIoVW65pE&ab_channel=GDC
游戏细节:在我的例子中,玩家正在通过一个程序生成的虫洞,该虫洞由使用 MeshCollider 的 Segment 对象组成。虫洞在 3D 空间中随机扭曲,而宽度和高度则动态变化。玩家可以在隧道内部进行 360 度扫射(重力方向与位置相关)。
这使得我发现的更简单的解决方案变得不切实际。其中包括:
- 使用单个对象而不是多个对象
- 在关节后面放置多余的碰撞器
我设法在 OnCollisionEnter() 中标记了这些错误的碰撞。PlayerController 上的这个方法可以很好地识别这些错误的碰撞,并引发一个标志。
但是在优雅地解决问题时,我完全不知所措。
目前,我只是在每帧缓存玩家的速度。如果标记了碰撞,我会用前一帧的缓存速度覆盖结果速度。这适用于大多数情况:玩家在不知不觉中进入地板一帧,并越过有问题的关节。但是在足够高的速度或与隧道内的障碍物相互作用的情况下,玩家有可能被弹出地板并进入太空。我不想过多地限制玩家的速度,因为游戏的感觉部分依赖于高速和硬碰撞。
有谁知道解决这些错误碰撞的更好方法?
unity3d - 如何在 Unity 中为飞行的 3D 鸟添加对撞机?
嗨,我在 Blender 中制作了一个看起来像这样的鸟类模型(我已经在智能手机上录制了视频)https://youtu.be/9oa-h_EG228。我成功地将它导入到 Unity 中。现在我想为此添加一个对撞机。
当我添加网格碰撞器并选择凸选项时,它太不准确了。我在统一文档中看到不建议使用,因为处理能力会增加。我也取消了凸选项,但我什么也得不到
对于像峡谷一样的地形,我将地形设为刚体,选择“is Kinematic”并取消选择其中的重力。我还添加了取消选择凸面的网格对撞机。我对一个圆柱体的测试对象进行了测试,我对结果感到满意。我在鸟身上尝试了同样的技巧,但显然没有选择“is Kinematic”,但它不起作用。我已经在搅拌机中对这些东西进行了建模。有没有一种更简单的方法可以为这些东西统一添加一个完美的对撞机?