Unity 引擎做残影效果——1、BakeMesh

2023-10-28 07:40

本文主要是介绍Unity 引擎做残影效果——1、BakeMesh,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity实现残影效果

  大家好,我是阿赵。
  这次来分享一下在Unity里面做残影的效果。
  所谓的残影,就是在角色移动的过程中,留下一串残留的影子。
在这里插入图片描述
在这里插入图片描述

  这种效果比较常出现在格斗游戏和动作游戏。
  在Unity里面做残影,方法很多。我这里将会介绍三种方法:
1、BakeMesh
2、屏幕后处理
3、顶点偏移。
  这一篇先介绍最常见的BakeMesh方法。

一、原理

  用BakeMesh来实现残影,实际上是通过SkinnedMeshRenderer.BakeMesh方法实现的。
  这个方法的作用,是在调用的时候,把蒙皮的网格当前帧的网格情况复制出来,变成一个新的网格模型。
在这里插入图片描述
在这里插入图片描述

  实际上,这种方法做残影,是真的在场景里面生成了很多个物体,每个物体代表了某一帧的角色的网格模型。
  至于想复制出来的模型是什么效果,就自己选择一种材质球附上去就行了。比如你想要红色半透明的,或者边缘光半透明之类,都可以。

二、优缺点

1、优点

  这种方法的优点是效果还不错,通过控制复制网格的频率,就可以做出很细腻的残影效果。
  然后这种方法的实现难度非常低,你知道了SkinnedMeshRenderer.BakeMesh方法,在适当的时候调用,获得一个Mesh,并且塞到一个MeshFilter上面,加一个材质球,就可以显示出来。基本上不涉及到什么难的计算。

2、缺点

  缺点是显而易见的,首先是复制很多个Mesh出来,增加了内存的使用和GC回收的频率。然后是一个模型的网格渲染了很多次,渲染性能不是很好。
  如果同屏幕多个角色使用这种方式做残影,那么渲染压力是极端的增大。
  所以这种方法如果要使用,也要多考虑一下,比如只能主角使用,并且生成残影的数量可能要做一下控制。

三、代码

  这种方式,只需要写C#代码就行。然后生成的残影需要定时删除自己,或者自己建立一个对象池都可以。由于要做透明度渐变,所以附加在复制出来的MeshRender上的材质球,要么每个Render一个材质球,要么用SetPropertyBlock去设置每个材质球不同的透明度。
  我这里只是一个demo,所以写得不是很严谨,只是表达一下过程了:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MoveBakeMesh : MonoBehaviour
{public bool isMove = false;public SkinnedMeshRenderer[] skinList;public int spaceTime = 5;public int countTime = 0;public Material bakeMat;private Vector3 oldPos;// Start is called before the first frame updatevoid Start(){skinList = this.gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();}// Update is called once per framevoid Update(){countTime++;if(countTime%spaceTime == 0){BakeFun();}}private void BakeFun(){if(Vector3.Distance(this.gameObject.transform.position,oldPos)>0){oldPos = this.gameObject.transform.position;for (int i = 0; i < skinList.Length; i++){Mesh mesh = new Mesh();skinList[i].BakeMesh(mesh);GameObject go = new GameObject();MeshFilter mf = go.AddComponent<MeshFilter>();mf.mesh = mesh;MeshRenderer mr = go.AddComponent<MeshRenderer>();mr.material = new Material(bakeMat.shader);go.transform.position = this.transform.position;go.transform.rotation = Quaternion.Euler(-90, 0, 0);DelayDetele dd = go.AddComponent<DelayDetele>();dd.mat = mr.material;}}}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DelayDetele : MonoBehaviour
{public float delTime = 0.8f;public float delSpeed = 1;public Material mat;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){delTime -= Time.deltaTime * delSpeed;if(mat){mat.SetColor("_Color", new Color(1f, 0.2f, 0, delTime / 4));}if(delTime <=0){GameObject.Destroy(this.gameObject);}}
}

这篇关于Unity 引擎做残影效果——1、BakeMesh的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291705

相关文章

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

使用Python实现生命之轮Wheel of life效果

《使用Python实现生命之轮Wheeloflife效果》生命之轮Wheeloflife这一概念最初由SuccessMotivation®Institute,Inc.的创始人PaulJ.Meyer... 最近看一个生命之轮的视频,让我们珍惜时间,因为一生是有限的。使用python创建生命倒计时图表,珍惜时间

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

Smarty模板引擎工作机制(一)

深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解。 在没有使用Smarty模板引擎的情况下,我们都是将PHP程序和网页模板合在一起编辑的,好比下面的源代码: <?php$title="深处浅出之Smarty模板引擎工作机制";$content=

MySQL技术内幕_innodb存储引擎

MySQL技术内幕_innodb存储引擎 INNODB innodb中如果表没有主键 表是否由 非空唯一键,有则该字段为主键没有,则自动创建一个6字节大小的指针 innodb存储引擎的所有数据都存储在表空间中,表空间由段,区,页(块)组成。 如果启用了 innodb_file_per_table, 则每张表内的数据可以单独放在一个表空间中即使启用了上面参数,共享表空间也会因为 系统事务信息

Matter.js:Web开发者的2D物理引擎

Matter.js:Web开发者的2D物理引擎 前言 在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。 Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。 无论是模拟重力、碰撞还是复杂的物体运动,Matter.js 都能轻松应对。 本文将带你深入了解 Matter.js ,并提供实际的代码示例,让你一窥其强大功能

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档