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实战核心技术详解 ...
随机推荐
- NodeBB,一个基于nodejs的响应式论坛
喜欢方便的同学请绕道去discuz,好吧我是nodejs的重视患者,首先你要有自己的vps或则云空间,比如9cloud,我今天用的是阿里云的VPS. 进入阿里云Ubuntu主机 .... 输入密码进入 ...
- android模拟器使用gps定位
在模拟器上获取GPS信息时,使用Location loc = LocationManager.getLastKnownLocation("gps");来获取location信息,但 ...
- poj 3345 Bribing FIPA (树形背包dp | 输入坑)
题目链接: poj-3345 hdu-2415 题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱 其中有一些国家是老大和小弟的关系,也就是说,如果你获 ...
- Node使用淘宝 NPM 镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org之后可以通过cnpm来安装node模块cnpm install [name]
- Camera2必知必会
引言 一切源于在项目过程中的一个Bug:我的需求是在MainActivity 实现自动预览,也可以点击跳到签到SignedActivity去实现拍照签到,第一次进入界面的时候都是正常的,但是有时候返回 ...
- HDU1588-Gauss Fibonacci(矩阵高速幂+等比数列二分求和)
题目链接 题意:g(x) = k * x + b.f(x) 为Fibonacci数列.求f(g(x)),从x = 1到n的数字之和sum.并对m取模. 思路: 设A = |(1, 1),(1, 0) ...
- 关于zookeeper的自我解惑
分布式服务框架 Zookeeper -- 管理分布式环境中的数据: http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ ...
- 1、创建一个空白的xls和xlsx文件
1.创建一个空白的xls文件 Step1:先引入库NPOI.dll文件 Step2: ①:实例化一个workbook,实为在内存表中创建一个xls文件 NPOI.HSSF.UserModel.HSSF ...
- java Socket 获取本地主机ip
package cn.itcast.net.p1.ip; import java.net.InetAddress;import java.net.UnknownHostException; publi ...
- 头文件dirent.h
<dirent.h>是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务的函数原型,例如opendir函数.readdir函数. opendir函数: DI ...