游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界。场景的逼真是在渲染效果、角色AI、游戏逻辑、物理效果等等一起导致的结果。现在游戏越来越大,除了渲染,物理估计是最好性能的一部分。在动作游戏中,物体的毁灭和破碎效果,让战斗更加的逼真和酣畅淋漓的感觉,这篇文章主要从自己应用的角度来简单介绍破碎效果的实现。

1 简单实现

使用maya等3D工具制作碎块组成的物体,游戏中在物体被打碎的时候,首先销毁原先的物体,然后再用碎片组成的pretab替换,形成的效果则是每个碎块的加力方式不同,需要通过调整来实现。可以参考: http://www.cnblogs.com/zsb517/p/3986278.html

注意一下几个函数的使用:

Rigidbody.AddExplosionForce : 添加爆炸力,力的大小按距离减小

Physics.OverlapSphere : 检测范围内的碰撞体列表

下面的代码测试效果:

void FixedUpdate()

{

if(Input.GetKeyDown(KeyCode.Space))

{

RaycastHit hit;

if (Physics.Raycast(Camera.mainCamera.ScreenPointToRay(Input.mousePosition), out hit))

{

Debug.Log("AddExplosionForce");

Collider[] hits;

hits = Physics.OverlapSphere(hit.point,raduis);

foreach(Collider t in hits)

{

if(t != null && t.attachedRigidbody!=null)

t.attachedRigidbody.AddExplosionForce(force,t.attachedRigidbody.position,raduis,ups);

//t.attachedRigidbody.AddForce(new Vector3(0f,0f,1f) * 500.0f);

}

}

}分割

}

2 mesh实时分割

使用插件Shatter Toolkit 1.41,实现类似切水果中的效果,可以以点为中心对物体分割成几个部分或者直接使用平面对物体进行分割,这种方法需要耗费CPU的运算功能,切割时首先根据给的平面方程将物体分割成上两部分,对处于边界线上的三角面片需要对顶点,法线,纹理,颜色,切线等进行插值计算,产生新的信息。插件实现了基本的要求,但是如果实现个人具体的效果还是需要对切割前后的事件进行处理和扩展。

使用说明:

当你需要破碎或者分裂物体的时候。你需要在物体上附加一个shattertool脚本实例对象和一个uvmap实例对象,切割之后,物体的碎片将会被实例化为原物体的克隆。

破碎工具脚本需要物体本省含有MeshFilter组件,MeshCollider和Rigidbody组件也是需要的

注意点1:如果你是用meshCollision和刚体组件,需要打开MeshCollider Convex选项,进而避免分裂后组件的质量更新问题

注意点2:如果ShatterTool.FillCut选项被打开,则网格的每个边属于两个三角面片,也就是说网格是封闭的

关于使用:

1 附件 ShatterOnCollision脚本到物体上,通过触发碰撞来触发

2 附件鼠标事件到物体上,包括点击、滑动以及拖拉

3 发送带有“Shatter”、被分割位置的世界坐标点,触发shattle tool中的Shatter事件

4 发送"Split"消息,带有一个世界坐标系中的面序列。触发shattle tool中的Split事件

5 使用ShatterScheduler事件管理机制,通过添加task的方法发送消息,进而可以控制更多的事件根本

关于鼠标:

1 鼠标点击后的破碎效果

2 鼠标划线方式切割

3 鼠标拖动效果

关于层级:

HierarchyHandler 脚本可以帮助实现切割中的层析管理

关于效果:

没做太多处理,可以通过切割前后的消息事件进行处理,类似HierarchyHandler的管理方法,处理切割前和切割后的效果

技术实现:

(1)计算切面

Plane splitPlane = new Plane(Vector3.Normalize(Vector3.Cross(line, ray.direction)), hit.point);

line为世界坐标系中的直线向量--Vector3 line = mainCamera.ScreenToWorldPoint(new Vector3(end.x, end.y, near)) - mainCamera.ScreenToWorldPoint(new Vector3(start.x, start.y, near));

ray.direction为屏幕到切割点的向量--》Ray ray = mainCamera.ScreenPointToRay(Vector3.Lerp(start, end, (float)i / raycastCount));

上面二者叉乘后的结果就是需要平面的法向量,再加上切割垫就可以确定切割平面

(2)单点切割方案:

利用vector生成几个随机的面向量,结合切割点形成几个平面

类似的unity插件:Shatter Toolkit 1.41 ,下载地址: http://www.unitymanual.com/thread-19781-1-1.html

3 爆破效果(Fracture 最大50块的分割)

使用插件:Fracturing__Destruction_1.11,这个插件稍微复杂点, 其实基本原理和第一种类似,牛逼的地方在于不需要美术参与碎块的破裂,插件会首先根据你的设置将物体打碎,生成另外一堆碎块,并且对碎块之间的连接关系进行记录,方便后面实现破碎时的处理。插件的完成性非常好,基本上已经可以像使用粒子一同一样,通过设置就可以实现一些很好的破碎效果。因为不需要实时的计算碎片,使用中的效果还是可以的,如果需要prefab, 则需要占用点资源罢了。使用前请仔细阅读的设置面板~~实在太多参数了。具体的使用可以 参考这里

4 粒子效果

总结,主机性能不好的情况下,尤其是GPU性能不强,上述两种方法产生的碎块都是刚体性质,爆破过程中都会去利用物理引擎,所以对性能的耗费比较厉害,尤其是碎片比较多的情况下。适当的控制碎片的数目会比较好点

好的效果应该是多种效果的结合,比如破碎后马上生成粒子效果,不过要人感觉到自然,当然也需要好的机器性能来支撑这些大量的物理计算和渲染。公司的主机性能还是比较差,过多的物理计算和精细的渲染就会造成卡顿。不过说实话,好的游戏并不一定必
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6122577.html如需转载请自行联系原作者

jiahuafu

unity 实现物体破碎效果的一些方法 - 细雨淅淅相关推荐

  1. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  2. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  3. ae破碎效果在哪_AE制作破碎效果的详细方法_如何使用AE制作碎片效果_碎片效果怎么使用_AE制作碎片爆炸效果2019完整版教程_9号资讯...

    第 2 页 AE制作破碎效果的详细方法 如何用AE制作破碎的效果? 1.首先,打开我们的软件,AE,小编用的是CS6版本的,不过即使版本不同,其中的操作也都是大同小异哦. 2.打开之后,我们需要新建一 ...

  4. Unity Shader·屏幕破碎效果

    Unity Shader·屏幕破碎效果 前言 最近在做一个新的MMD(用Unity来实现),其中用到了一些好看的渲染技术在这里分享一下. 视频链接 https://www.bilibili.com/v ...

  5. [教程] 在Unity中制作物体破碎效果

    这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...

  6. Unity物体破碎效果

    物体破碎的效果在游戏中非常常见,在本文中将实现任意大小的长方体的敲击破碎,并为实现更复杂物体的破碎效果做好铺垫.     最终效果图如下:     为了实现这种破碎效果,我们必须生成碎片物体,在本例中 ...

  7. unity 3d物体描边效果_从零开始的卡通渲染描边篇

    序言: 一直对卡通渲染非常感兴趣,前后翻找了不少的文档,做了一些工作.前段时间<从零开始>的手游上线了,试着渲染了一下的其中模型,觉得效果很不错.打算写一个专栏记录其中的渲染技术.在后面的 ...

  8. unity 控制物体移动的三种方法

    可以使按照指令物体移动的方法 一.常规方法 //四个方向if (Input.GetKey(KeyCode.W)){transform.Translate(Vector3.forward*moveSpe ...

  9. html文字破碎特效,AE怎么制作破碎文字特效? ae文字破碎效果的制作方法

    本例主要讲解利用[碎片]特效制作破碎文字.我现在教你如何制作破碎文字. 1.打开Adobe After Effects CC 2015. 2.在弹出的"欢迎"使用Adobe Aft ...

最新文章

  1. Laravel 配置项即时载入的服务提供者
  2. jmeter—操作数据库
  3. python一直报缩进错误_如何避免Python中的缩进错误
  4. mr图像翻转的原因_CSS图片翻转例子
  5. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
  6. 机器学习入门资源--汇总
  7. android开发菜单,Android学习指南之十六:Android菜单详解
  8. JAVA——使用Spring Boot Scheduled时注入simple-robot Bot解决方案
  9. future.cancel不能关闭线程_彻底弄懂线程池-newFixedThreadPool实现线程池
  10. CentOS7入门_安装并配置mysql5.7.18
  11. pssh远程批量执行命令
  12. 【java笔记】函数式接口
  13. Oracle数据库出现问题时,这十个脚本帮你快速定位原因
  14. 加群android代码那个是,QQ加群组件-iPhone、Android、网页上加入QQ群
  15. Excel 取消单元格合并,并且将空值填充
  16. 幸福温馨抑或婚姻枷锁——戴尔与EMC的蜜月期究竟进展如何?
  17. go map同时储存多种类型的value
  18. linux 中yum 安装maven
  19. python 熊猫,Python:熊猫系列
  20. Linux 上的基础网络设备详解

热门文章

  1. Makefile的常见错误信息
  2. 诺基亚NBU备份文件名片导出程序 vCard助手
  3. Centos7---查看内存型号
  4. 怎么查看笔记本内存条型号_怎么看电脑内存条型号 电脑内存条型号查看方法【详解】...
  5. Zabbix企业微信告警最新版
  6. 解决Activiti 7自动部署后不生成数据库act_hi _* 历史表
  7. WOT 2017会议嘉宾名单提前看!
  8. 【Python进阶】9- Pandas的应用
  9. MacBook通过XGP玩女神异闻录5皇家版不踩坑指南
  10. 强收红包漫天要价偷转黑车……滴滴网约车被指太任性