unity3d - 当我提高速度时,OnCollisionEnter 不起作用
问题描述
我统一创建了 6 个盒子对撞机,形状像一个立方体。立方体内部有一个球体。这是我的球体运动脚本。
private Vector3 moveDirection=new Vector3();
public float speed = 7;
private void Start()
{
moveDirection = transform.forward;
}
private void Update()
{
var transform1 = transform;
transform1.position += moveDirection * Time.deltaTime * speed;
}
private void OnCollisionEnter(Collision collision)
{
moveDirection = Vector3.Reflect(moveDirection, collision.contacts[0].normal);
}
如您所见,如果您运行此球体,它将在立方体内无限移动,但如果尝试将速度更改为 60 或更高速度,则球体会在立方体外移动。那么我该如何解决这个问题呢?
解决方案
你可以做一些事情来帮助碰撞,碰撞没有“工作”的原因是因为你的球体移动得太快以至于它从不接触对撞机,它完全跳过它。
您可以做一些事情来尝试修复它。
如果您有一个刚体连接到您的球体,您可以将 RigidBody Interpolate 设置为“Interpolate”
阅读此处了解它的作用
您还可以将碰撞检测设置为连续动态。
将DontGoThroughThingsScripts附加到您的球体上 阅读此处的 DontGoThroughThingsScripts。它通过在你的最后一个点和你的当前点之间进行光线投射来工作,如果它击中一个对撞机,它会将你移回你应该碰撞的地方
在Edit -> Project Settings -> Physics 中将 Default Solver Iterations 设置为更高的值。这通过运行更多次并消除错误来提高准确性。
最后,您还可以增加对撞机的大小,使球体更难错过(不是永久或干净的修复方法)
请注意,这将对性能产生很大影响。这是一个不可避免的权衡。
推荐阅读
- java - Android 无法使用 volley 发送 post 请求(BasicNetwork.performRequest: Unexpected response code 404)
- powershell - 不支持给定路径的格式(但在我看来还可以)
- python - 蟒蛇 | 熊猫如何将列内的列表拆分为多列
- heroku - 无法为 Heroku 应用程序使用自定义域
- sql - 如何修复动态 Sql 错误:-104;Token Unkown - 在 where 子句中使用子查询来过滤最大日期
- python - 将选定的文件复制到python中的目录
- java - JTable 不会在 fireTableChanged 上刷新
- javascript - 获取所有可用的列表
- ruby-on-rails - Rails - 仅在满足条件时发送关联表单
- python - Tkinter 窗口作为 App 类方法而不是新类或顶层(Python 3.X。)