物体破碎的效果在游戏中非常常见,在本文中将实现任意大小的长方体的敲击破碎,并为实现更复杂物体的破碎效果做好铺垫。
    最终效果图如下:

    为了实现这种破碎效果,我们必须生成碎片物体,在本例中将根据敲击点生成四个碎片物体。在Unity中,物体的形状是由MeshFilter组件中的Mesh对象决定的。也就是说,只要我们创建恰当的Mesh对象,我们就能够生成任意形状的物体。
    从Mesh类的属性中,可以看出跟物体形状有关的属性为:

//Vector3数组,储存顶点的相对位置
public Vector3[] vertices { get; set; }
//int数组,每三个数字一个三角面的顶点信息,每一个数字都是vertices的索引
public int[] triangles { get; set; }

输出一个cube的vertices如下(部分):

    输出一个cube的triangles如下(部分):

    很显然,如果从零构造一个物体,是比较复杂的。不过只是生成碎片的话,我们其实只需要更改部分顶点位置。

利用这种思路,生成一个碎片:

//生成Mesh对象
private Mesh GenMesh(Mesh mesh, Vector3 hitPoint)
{List<Vector3> mesh_vertices = new List<Vector3>();List<Vector3> piece_vertices = new List<Vector3>();int[] mesh_triangles = mesh.GetTriangles(0);List<Vector3> piece_normals = new List<Vector3>();mesh.GetVertices(mesh_vertices);mesh.GetNormals(piece_normals);foreach (Vector3 item in mesh_vertices){piece_vertices.Add(item);}int i = 0;foreach (Vector3 v in mesh_vertices){if (v == new Vector3(0.5f, 0.5f, 0.5f) || v == new Vector3(0.5f, 0.5f, -0.5f)){piece_vertices[i] = new Vector3(hitPoint.x, hitPoint.y, v.z);}else{if (v.x == 0.5f){piece_vertices[i] = new Vector3(0, v.y, v.z);}if (v.y == 0.5f){piece_vertices[i] = new Vector3(v.x, 0, v.z);}}i++;}Mesh piece = new Mesh();piece.SetVertices(piece_vertices);piece.SetTriangles(mesh_triangles,0);
//法线信息与光照相关piece.SetNormals(piece_normals);return piece;
}
//生成物体private GameObject GenPiece(Mesh piece_mesh,MeshRenderer meshRender){GameObject piece = new GameObject("piece");piece.transform.position = transform.position;piece.transform.localScale = transform.localScale;MeshRenderer piece_render = piece.AddComponent<MeshRenderer>();piece_render.material = meshRenderer.material;piece.AddComponent<MeshFilter>().mesh = piece_mesh;Rigidbody rig = piece.AddComponent<Rigidbody>();piece.AddComponent<MeshCollider>().convex = true;return piece;}
//撞击点计算
//hit.transform.localScale为破碎目标缩放信息
Vector2 hitPoint = raycastHit.transform.position - raycastHit.point;
-new Vector2(hitPoint.x / hit.transform.localScale.x, hitPoint.y / hit.transform.localScale.y)

效果如图:

以上修改了cube的右上角顶点,以及与右上角x或y相同的顶点,以此生成了1/4的碎片。

只要分别修改4个顶点,就能生成四个碎片,再添加力,就可以实现炫酷了破碎效果了。

工程下载链接请关注公众号SFGame后(*^_^*)回复:物体破碎

更多个人原创博客,可关注公众号SFGame

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. unity 实现物体破碎效果的一些方法 - 细雨淅淅

    游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...

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

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

  5. Unity Shader·屏幕破碎效果

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

  6. Unity 实现自定义图片破碎效果-2D_Destruction

    Unity 实现自定义图片破碎效果-2D_Destruction 导引 效果预览 源码下载地址 实现流程 1.添加SrpiteRenderer组件 2.添加Explodable组件 3.Polygon ...

  7. unity 条目换位效果_Unity AI主题博客条目

    unity 条目换位效果 Welcome to the first of Unity's new AI-themed blog entries! We have set up this space a ...

  8. Unity 实现贴花效果的制作教程

    c#教程​https://www.cnblogs.com/Yesi/p/15829200.html ​ 有些游戏中的战斗痕迹的效果会通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方 ...

  9. 用Unity实现景深效果

    用Unity实现景深效果 景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果.今天我们讨论如何在Unity中实现它. 简单来说,景深效果可以拆分为两个部分,一个部分是聚焦,使画面中指定的区 ...

最新文章

  1. 2018-3-15模式识别--学习笔记(一)
  2. mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值
  3. 对话RTP作者Ron Frederick: 我非常期待QUIC的发展
  4. 基于RAF的一个小动画框
  5. ubuntu下安装RabbitVCS(失败记录)
  6. 【华为云技术分享】如何设计高质量软件-领域驱动设计DDD(Domain-Driven Design)学习心得
  7. J2EE常用Listener(转载)
  8. god is a girl
  9. linux孤儿进程组深入理解,unix基础---有关于孤儿进程组和终端会话的理解-------值得一看!!!...
  10. Java界面开发(以五子棋为例)
  11. Excel中RATE函数的Java实现欢迎加入我的星球
  12. 新的笔记本电脑没有计算机,最新出炉!2020年10款最轻的笔记本电脑:轻就对了,是您想的吗?...
  13. openresty ngx_lua请求响应
  14. SVG的国旗图标集合flag-icon-css在vue中的使用
  15. 修改C:\Users 下面文件夹的名称
  16. PCB能承受住100 A的电流吗?
  17. 爱立信MGW的IP地址应用
  18. 几何公差之形状误差及其评定
  19. 软件测试基础(三)测试环境与框架
  20. 使用vb调用api注册表

热门文章

  1. STM32 F4 OV2640摄像头学习笔记(二)
  2. ARTS-9(回溯法的组合总和系列,泛型总结、人生的意义在于体验)
  3. my thinking
  4. 结婚后谁管钱更高效?怎样越管越多?
  5. NOIP2017D1T3-逛公园
  6. mpc台式计算机的功能是什么意思,mpc是什么意思_mpc怎么读_mpc翻译_用法_发音_词组_同反义词_multipurpose computer 多用途计算机-新东方在线英语词典...
  7. FTP和使用Docker搭建FTP服务
  8. 软件R的安装和使用(视窗电脑)
  9. 计算机网络工程师的自我评价,计算机网络专业简历的自我评价.docx
  10. java 微信 H5支付