Unity刚体穿透问题测试以及解决
测试环境很简单,一面墙,红色方块不停向前

然后,由于刚体是FixedUpdate执行的,把FixedUpdate执行间隔调慢一些方便Debug:

OK,下面还原一次经典的穿透问题:

测试脚本:
void Update()
{
transform.Translate(, , * Time.deltaTime);
}
OK,然后我测试了几种方法,最后发现直接改速率最为有效,AddForceAtPosition虽然也可以但是不常用:(注释掉的方法都测试失败,碰撞检测"连续/非连续"都测过)
void FixedUpdate()
{
//transform.Translate(0, 0, 10 * Time.deltaTime);
//transform.Translate(0, 0, 10 * Time.fixedDeltaTime);
//GetComponent<Rigidbody>().position += transform.forward;
//GetComponent<Rigidbody>().MovePosition(transform.position + transform.forward * 10 * Time.deltaTime);
//GetComponent<Rigidbody>().MovePosition(transform.position + transform.forward);
GetComponent<Rigidbody>().AddForceAtPosition(new Vector3(, , ), transform.position + transform.forward, ForceMode.VelocityChange);
GetComponent<Rigidbody>().velocity = transform.forward * 100000f;
}
但这只是防止FixedUpdate更新频率低的解决方法,我极限测试了一下,又穿透了:
void FixedUpdate()
{
GetComponent<Rigidbody>().velocity = transform.forward * 100000f;
}
然后我尝试把碰撞检测改为连续:

终于,没有出现穿透:

再补上一个夹角测试:(卡是因为我把FixedUpdate频率调低了)

测试脚本:
void Update()
{
if(Input.GetKey( KeyCode.A))
{
GetComponent<Rigidbody>().velocity = transform.right * -20f;
} if (Input.GetKey(KeyCode.D))
{
GetComponent<Rigidbody>().velocity = transform.right * 20f;
} if (Input.GetKey(KeyCode.W))
{
GetComponent<Rigidbody>().velocity = transform.forward * 20f;
} if (Input.GetKey(KeyCode.S))
{
GetComponent<Rigidbody>().velocity = transform.forward * -20f;
}
}
另外测了一下Animator的穿透情况,打开根运动造成的位移不会穿透。如果是动画控制的位移会穿透,但除非你强制移除Animator,动画位移不会有什么影响
并且和UpdateMode的具体模式无关
Unity刚体穿透问题测试以及解决的更多相关文章
- Unity Shader之模板测试
Unity Shader之模板测试 一沙一世界,一花一天堂 一.Stencil testing 渲染管线 当片段着色器处理完一个片段之后,模板测试(Stencil Test)会开始执行,和深度 ...
- 关于基于python2.7的unity自动化测试框架GAutomator测试环境的搭建(源码网盘下载地址:https://pan.baidu.com/s/1c2TXwtU)
关于基于python 2.7的unity自动化测试框架GAutomator测试环境的搭建 百度云盘链接(思维图学习资料):https://pan.baidu.com/s/1dFWExMD 准备工作(具 ...
- Unity中UGUI鼠标穿透UI问题的解决方法
不过在使用时需要先获取两个红色显示的变量,graphicRaycaster和eventSystem. 这两个变量分别对应的是Canvas中的GraphicRaycaster组件和创建UI时自动生成的“ ...
- Unity 刚体问题 解决相互作用力
在进行开发过程中,当两个都具有碰撞体和刚体的 游戏物体进行接触之后,或多或少都会出现相互作用力,对于体验有一定的影响. 需要在FixedUpdate(间隔固定的时间调用,不受游戏帧率的影响) 当中 ...
- Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)
摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...
- 刚体Collider包围测试
测试结果为会自动排出修正坐标(之前位于中心): 2016/2/29补充: 如果外面大的Cube相对小的Cube质量很高,会弹出且不出现移动(已锁住弹出物旋转,如果不锁会飞出去): 如果没有足够的空间排 ...
- Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
1.安装unity 时我选择了free版的,打开已有项目时出现如下错误提示. 解决方法:先把要导入的文件先拷贝到unity3d安装目录下对应的文件夹内,之后再返回unity3d软件,右键选择“导入”. ...
- hadoop tez 结合搭建以及测试异常解决
hadoop tez 搭建 1.下载tez,本人下载的是bin.0.92版本. http://www.apache.org/dyn/closer.lua/tez/0.9.2/ hadoop dfs - ...
- Unity内存优化技术测试案例
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
随机推荐
- ASP.NET伪静态
http://www.duote.com/tech/5/14543.html 三.伪静态的坏处 当然犹如一篇文章的作者所说的:"如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线 ...
- PHP 表单 - 3(PHP 表单 - 必需字段)
PHP 表单 - 必需字段 本章节我们将介绍如何设置表单必需字段及错误信息. PHP - 必需字段 在上一章节我们已经介绍了表的验证规则,我们可以看到"名字", "E-m ...
- jQuery(一)引入
一.jQuery简介 jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多) 二.安装 2.1.下载 下载地址:http://jq ...
- 《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记
一.为什么GUI是单线程化 传统的GUI应用程序通常都是单线程的. 1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱) 2. 通过一个"主事件循环 ...
- 设置Treeview背景色的问题1
有没有哪位兄弟在VB中使用sendmessage对TreeView改变背景色?我现在遇到一个问题,如果把linestyle设为1 的时候,展开节点的时候root部位会 有一个下拉的白色块,如果设为1 ...
- 〖Linux〗Ubuntu13.10中使用虚拟机对MTK手机进行线刷
最近一个同学把一台MTK手机刷坏了,在我的笔记本电脑上没有WindowsXp操作系统: 而在MTK线刷过程中,最好的刷机系统便是WindowsXP3,于是有了想在Linux中直接开启XP虚拟机来刷机的 ...
- Redis学习(8)-redis持久化
内存(兔子):高效,断电数据丢失 硬盘(乌龟):读写速度慢于内存的,断电数据依旧存在 持久化:把数据保存在硬盘上 关系型数据库:MySQL-持久化: 任何操作都是硬盘上,断电以后,硬盘上数据还在. 非 ...
- 微信小程序独家秘笈之抽奖大转盘
代码地址如下:http://www.demodashi.com/demo/14209.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- MYSQL查询一周内的数据(最近7天的)
select * from wap_content where week(created_at) = week(now) 如果你要严格要求是某一年的,那可以这样 查询一天: select * from ...
- 微信小程序的POST和GET请求方式的header区别
1.post请求: wx.request({ url: 'https://m.***.com/index.php/Home/Xiaoxxf/make_order', header: { "C ...