unity3d - Raycasting 立即移动的对撞机

标签 unity3d

我需要将一些带有附加碰撞器的变换移动到特定位置,然后检查其中一个是否被光线转换击中。

我已经做到了天真的方式(伪代码):

foreach(object in objects){
   actual_position = object.transform.position
   object.transform.position = object.new_position
}
if(Physics.Raycast(...)) objectHit();
// Then I revert each of them them back to their actual_position

在使用相同的上下文(每个对象的测试之间的相同位置)进行多次测试后,光线转换有时会丢失,有时不会(~50/50)。

做了一些研究,发现在 Raycast 文档页面中:

If you move colliders from scripting or by animation, there needs to be at least one FixedUpdate executed so that the physics library can update its data structures, before a Raycast will hit the collider at it's new position.



于是我平息了怒火,开始寻找解决办法。
该线程有一种使用协程等待下一个滴答声的方法:
Raycast doesn't work properly

我担心它对我不起作用,因为我需要物体立即回到它们的真实位置。
这个过程每帧可以发生多次(每次玩家开火时)

有没有办法强制对撞机更新?

如果没有......我应该制作自己的光线转换和碰撞器吗? :(

谢谢

最佳答案

另一种解决方法是立即停用和激活游戏对象(附加对撞机)。在这种情况下,碰撞器位置将在单帧中更新。
另一个解决方案是
Physics.autoSyncTransforms and Physics.SyncTransform

关于unity3d - Raycasting 立即移动的对撞机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40609672/

相关文章:

unity3d - OnCollisionEnter2D(...) 未调用

c# - 从暂停菜单退出以从标题屏幕重新启动 C#

c# - Unity - 连接水管的游戏。检查管道对象是否连接到中央源的问题

c - Unity UI Slider 改变UI Text

c# - 不同时间事件执行不同代码

c# - 二维房间的程序生成

ios - 将 Unity Game 插件到现有的 Xcode 项目中

c# - 如何使用 UnityWebRequest 从服务器下载 Asset Bundle 获取下载进度?

c# - unity OnMouseUp 和 OnCollisionEnter 同时

unity3d - Unity 分析器 Device.present