Unity物体破碎效果

您所在的位置:网站首页 我的世界破坏方块粒子效果图 Unity物体破碎效果

Unity物体破碎效果

2023-11-22 00:33| 来源: 网络整理| 查看: 265

    物体破碎的效果在游戏中非常常见,在本文中将实现任意大小的长方体的敲击破碎,并为实现更复杂物体的破碎效果做好铺垫。     最终效果图如下: 效果图     为了实现这种破碎效果,我们必须生成碎片物体,在本例中将根据敲击点生成四个碎片物体。在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 mesh_vertices = new List(); List piece_vertices = new List(); int[] mesh_triangles = mesh.GetTriangles(0); List piece_normals = new List(); 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(); piece_render.material = meshRenderer.material; piece.AddComponent().mesh = piece_mesh; Rigidbody rig = piece.AddComponent(); piece.AddComponent().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 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3