没有合适的资源?快使用搜索试试~ 我知道了~
主要为大家详细介绍了Unity实现喷漆效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
资源推荐
资源详情
资源评论
Unity实现喷漆效果实现喷漆效果
主要为大家详细介绍了Unity实现喷漆效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小
伙伴们可以参考一下
本文实例为大家分享了Unity实现喷漆效果展示的具体代码,供大家参考,具体内容如下
喷漆功能喷漆功能
**应用场景:**如墙上的标语贴花,汽车上的喷漆等。
选择方案:选择方案:
1、当然实现方法各式各异,最最最简单,也是最“不堪入目”的方法是直接给一个面片,然后获取喷漆位置,加上一个要喷漆
表面法线方向的偏移,作为最终面片放置位置,当然,不要忘了设置面片的方向。这种方法虽然说简单,但是效果并不理想,
会出经常现与其他物体穿插的情况,如果游戏中曲面太多,那么这个方案基本没法看。
2、对于个别特殊的需求来讲,比如说人物身上的纹身,完全可以用一个shader里实现,此方法仅限于一个贴花对应一个物
体,如果是一对多的情况,请看后边这两种。
3、有一种简易的方法是用Projector,这种方法实现较为简单,不多说。
4、接下来说一种动态生成网格方案,也较为常用,接下来就详细说说这种方案。
实现思路:实现思路:
喷漆的网格是根据场景中所喷位置的物体的网格动态生成的,喷漆的时候,获取规定范围内的物体,再用一个立方体(也可以
用球体)去截取这些物体的Mesh,从而构造新的网格,将喷漆渲染在这个Mesh就OK了。
代码实现:代码实现:
首先,我们需要一个获取规定范围内MeshRenderer的函数:
public GameObject[] GetAffectedObjects(Bounds bounds, LayerMask affectedLayers)
{
MeshRenderer[] renderers = FindObjectsOfType<MeshRenderer>();
List<GameObject> objects = new List<GameObject>();
foreach (Renderer r in renderers)
{
if (!r.enabled) continue;
if ((1 << r.gameObject.layer & affectedLayers.value) == 0) continue;
if (r.GetComponent<Decal>() != null) continue;
if (bounds.Intersects(r.bounds))
{
objects.Add(r.gameObject);
}
}
return objects.ToArray();
}
然后拿到这些GameObject去做裁剪,裁剪函数:
public void BuildDecal(GameObject affectedObject, bool isLast)
{
Mesh affectedMesh = affectedObject.GetComponent<MeshFilter>().sharedMesh;
if (affectedMesh == null) return;
//这里预存了已获取物体的vertices和triangles,减少了不必要的GC
Vector3[] vertices = GetVertexList(affectedObject);
int[] triangles = GetTriangleList(affectedObject);
//目标顶点转换到当前物体的模型空间
Matrix4x4 matrix = this.transform.worldToLocalMatrix*affectedObject.transform.localToWorldMatrix;
//将主要计算移入异步
Loom.RunAsync(() =>
{
for (int i = 0; i < triangles.Length; i += 3)
{
int i1 = triangles[i];
int i2 = triangles[i + 1];
int i3 = triangles[i + 2];
Vector3 v1 = matrix.MultiplyPoint(vertices[i1]);
Vector3 v2 = matrix.MultiplyPoint(vertices[i2]);
Vector3 v3 = matrix.MultiplyPoint(vertices[i3]);
Vector3 side1 = v2 - v1;
Vector3 side2 = v3 - v1;
资源评论
- 小米智能生活2023-07-27作者在文件中还提供了一些常见问题的解答,帮助读者回答了不少疑惑,非常贴心。
- 郑瑜伊2023-07-27对于不少人来说,这个文件提供了一个很好的起点,可以让他们更好地理解和掌握Unity中的喷漆技术。
- 天使的梦魇2023-07-27虽然这个文件可以帮助你实现喷漆效果,但它也没有过多夸大这个技术的重要性,更像是一个实用的指南,让人感觉很亲切。
- 艾斯·歪2023-07-27这个文件对于Unity实现喷漆效果的介绍相当详细,对于初学者来说非常友好。
- 笨爪2023-07-27文件中给出了清晰易懂的代码示例,让人能够轻松理解并实践喷漆效果的实现。
weixin_38557370
- 粉丝: 5
- 资源: 939
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 老飞飞搭建基础通用数据库V19数据库.rar
- jquery.js
- 机械设计多工位ACF贴胶带&预压设备sw18可编辑非常好的设计图纸100%好用.zip
- 基于Pytorch复现Point-Transformer,用于ShapeNet数据集点云分割
- 【医学影像分析】2D超声图像的分割检测(Ultrasound Nerve Segmentation - Kaggle数据集)
- 嘎嘎香的五款神仙谷歌插件
- .arch书源导入教程.mp4
- 贪心算法介绍及代码示例讲解
- CR13SP35MSI64 Crystal 水晶报表运行组件最后版本64位
- 图像分类数据集:玉米叶是否感染分类数据集(2分类,包含训练集、验证集)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功