Unity的3d游戏开发中,经常遇到需要将模型的某一部分(比如武器),单独做碰撞处理的情况。

导入模型后,给武器部分添加MeshCollider,MeshCollider的Mesh通常包含在模型里,如图:

勾选MeshCollider的Convex以及Inflate mesh后,在场景中能看到生成的绿色网格碰撞器。

但是运行后,会发现这个Collider并不随着模型动画一起运动。

不知道是不是问题太小白的原因,网上很少有相关问题的讨论,不少相关的问题都没有答案。

最终在csdn上翻到一篇文章,解决了问题。

参考链接:unity SkinnedMesh 播放动画时与MeshCollider不同步问题解决方案

原因是包围盒没有更新,并且形变动画对应的MeshCollider更新的话,代价太大。所以unity虽然提供了机制,但是不提倡使用。

核心方法是SkinnedMeshRenderer中有一个函数:BakeMesh,在update中调用该方法即可。

在Update调用如下代码:

    /// <summary>
/// 动态更新Mesh
/// </summary>
private void UpdateMesh ()
{
// weapon mesh
Mesh weaponColliderMesh = new Mesh();
weaponMeshRender.BakeMesh(weaponColliderMesh); weaponMeshCollider.sharedMesh = null;
weaponMeshCollider.sharedMesh = weaponColliderMesh;
}

运行后效果如下:

基本达到想要的效果。

剩余的问题:

1、通过上图能看到,武器与Collider并非完全契合。原因未知。

2、在Update中频繁更新Mesh可能会造成消耗太大。能想到的办法是

  a)每隔几帧更新一次;

  b)用简单的几何碰撞器(如BoxCollider)替代网格碰撞器(未测试)

如果你有关于此问题的更好的解决办法,请不吝指点。

解决Unity中模型部件的MeshCollider不随动画一起运动的问题的更多相关文章

  1. Unity中使用射线查询MeshCollider背面的方法

    之前遇到一个问题要从MeshCollider背面方向发出射线,直至检测到该射线与MeshCollider的相交点为止. 后来我用双面MeshCollider的方法解决了http://www.cnblo ...

  2. 关于Unity中AI随机巡逻障碍物预判与快速运动时物理穿透的思考

    如果不想用Unity的导航系统,很多时候就要解决如何预判前进路径中的障碍物问题,之前也看过一些非常经典的寻路算法例如AStar寻路,虽然也可实现功能,但总感觉有些小题大做.寻路算法大多数都是为了得出最 ...

  3. 移植UE4的模型操作到Unity中

    最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...

  4. Unity3d中模型导入轴向不对的解决方法

    在unity3d中导入模型,经常会遇到模型的轴向与unity中默认的轴向不符合的情况. 网上有很多解决办法都是说在3dmax中导出模型时修改模型的轴向,那么我接下来讲的就是如何在unity里面修改模型 ...

  5. Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug

    问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...

  6. 关于Unity中的几何体,材质和FBX模型

    一.创建几何体的类型 1: 创建平面 Plane;2: 创建立方体 Cube;3: 创建球体 Sphere;4: 创建胶囊体 Capsule;5: 创建圆柱体 Cylinder;6: 3D文字 3D ...

  7. Unity中Mesh分解与边缘高亮加上深度检测

    一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...

  8. Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)

    http://forum.china.unity3d.com/thread-32273-1-1.html 今天我们继续分享米哈游技术总监贺甲在Unite Beijing 2018大会上的演讲<在 ...

  9. 【转】Unity中的协同程序-使用Promise进行封装(三)

    原文:http://gad.qq.com/program/translateview/7170967 译者:崔国军(飞扬971)    审校:王磊(未来的未来) 在这个系列的最后一部分文章,我们要通过 ...

随机推荐

  1. Linux学习---内存分布基础

    内核空间 应用程序不允许访问 -----------------------------------------3G 栈空间 局部变量 RW ----------------------------- ...

  2. DOTween的基本用法

    首先声明一点,不要简单的认为 DOTween 只能用在 Transform 组件上完成一些简单的动画,或者是完成一些 UI 动画,DOTween 的用途是很广的,unity中有很多组件都可以使用 DO ...

  3. Servlet的创建二以及生命周期

    之前说Servlet可以通过实现Servlet接口来创建,但是我们看到了,需要重写该接口中的所有方法. 创建方式二:Servlet的创建还可以继承抽象类GenericServlet并重写其中的抽象方法 ...

  4. 浅谈如何检查Linux中开放端口列表

    给大家分享一篇关于如何检查Linux中的开放端口列表的详细介绍,首先如果你想检查远程Linux系统上的端口是否打开请点击链接浏览.如果你想检查多个远程Linux系统上的端口是否打开请点击链接浏览.如果 ...

  5. linux使用framebuffer的代码

    #include <linux/fb.h> #include <sys/mman.h> #include <sys/ioctl.h> #include <st ...

  6. PSR-PHP开发规范(本文版权归作者:luluyrt@163.com)

    遵循PSR-4的自动加载 一.简介 首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规范,让我们研发出来的代码更 ...

  7. eclipse里报:An internal error occurred during: "Building workspace". Java heap space(内存溢出)

    当在eclipse中的web工程中增加了extjs4,出现An internal error occurred during: "Building workspace".Java ...

  8. nohup和&后台运行,进程查看及终止

    1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup ...

  9. 【sql注入教程】SQL注入是什么?我们如何去玩转它

    [sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区   SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...

  10. PHP安装BCMath扩展

    我们都知道,大多数编程语言对于浮点型数据格式遵循 IEEE 754 标准,PHP也不例外,这就会导致在使用浮点数运算的过程中会有精度丢失的问题.PHP提供了BCMath库来支持更加精确的计算.但是我的 ...