Unity3d 残影效果(狂拽炫酷叼炸天)

时间:2023-02-09 11:43:15

效果图,真的很叼啊

Unity3d 残影效果(狂拽炫酷叼炸天)

我根据别人的改进了一版,支持MeshFilter上的Mesh(需要确保Mesh的Read/Write是开启的否则不能正常工作)

非常感谢原作者给提供思路。http://blog.csdn.net/langresser_king/article/details/50976029

代码

using UnityEngine;
using System.Collections;
using System.Collections.Generic; //残影特效,支持Mesh和SkinedMesh以及他俩组合
public class GhostEffect : MonoBehaviour
{
//如果让Mesh也带残影请保证Mesh的Read/Write是开启的
public bool IncludeMeshFilter = true; //残影
public class GhostImange
{
public Mesh mesh;
public Material material;
public Matrix4x4 matrix;
public float duration;
public float time;
} //材质
public Material EffectMaterial; //总时长
public float Duration = 5; //产生残影的间隔
public float Interval = 0.2f; //残影淡出时间
public float FadeoutTime = 1; private float mTime = 5;
private List<GhostImange> mImageList = new List<GhostImange>(); void Start()
{ } [ContextMenu("Play")]
public void Play()
{
mTime = Duration;
StartCoroutine(AddImage());
} IEnumerator AddImage()
{
while (mTime > 0)
{
CreateImage();
yield return new WaitForSeconds(Interval);
mTime -= Interval;
}
} void CreateImage()
{
SkinnedMeshRenderer[] skinRenderers = GetComponentsInChildren<SkinnedMeshRenderer>();
MeshFilter[] filters = null; int filtersCount = 0; if (IncludeMeshFilter)
{
filters = GetComponentsInChildren<MeshFilter>();
filtersCount = filters.Length;
} if (skinRenderers.Length+filtersCount <= 0)
{
return;
} CombineInstance[] combineInstances = new CombineInstance[skinRenderers.Length + filtersCount]; int idx = 0;
for (int i = 0; i < skinRenderers.Length; i++)
{
var render = skinRenderers[i]; var mesh = new Mesh();
render.BakeMesh(mesh); combineInstances[idx] = new CombineInstance
{
mesh = mesh,
transform = render.gameObject.transform.localToWorldMatrix,
subMeshIndex = 0
}; idx++;
} for (int i = 0; i < filtersCount; i++)
{
var render = filters[i]; var temp = (null != render.sharedMesh) ? render.sharedMesh : render.mesh;
var mesh = (Mesh)Object.Instantiate(temp);
combineInstances[idx] = new CombineInstance
{
mesh = mesh,
transform = render.gameObject.transform.localToWorldMatrix,
subMeshIndex = 0
}; idx++;
} Mesh combinedMesh = new Mesh();
combinedMesh.CombineMeshes(combineInstances, true, true); mImageList.Add(new GhostImange
{
mesh = combinedMesh,
material = new Material(EffectMaterial),
time = FadeoutTime,
duration = FadeoutTime,
});
} void LateUpdate()
{ bool needRemove = false; foreach (var image in mImageList)
{
image.time -= Time.deltaTime;
if (image.material.HasProperty("_Color"))
{
Color color = Color.white;
color.a = Mathf.Max(0, image.time / image.duration);
image.material.SetColor("_Color", color);
} Graphics.DrawMesh(image.mesh, Matrix4x4.identity, image.material, gameObject.layer);
if(image.time<=0)
{
needRemove = true;
}
} if (needRemove)
{
mImageList.RemoveAll(x => x.time <= 0);
}
} }

  

  

Unity3d 残影效果(狂拽炫酷叼炸天)的更多相关文章

  1. Unity3D手游开发日记&lpar;8&rpar; - 运动残影效果

    2D游戏的残影很简单,美术做序列帧图片就行了,那么3D游戏的残影美术做不了,得靠程序员动态创建模型来处理. 实现原理也很简单: 1.间隔一定时间创建一个残影模型 GameObject go = Gam ...

  2. as3如何做出残影效果

    在页游中,时不时能看到人物做一些快速移动动作如冲刺时,有残影效果,强化了画面表现.实际人肉眼之所以能看到残影的效果,是因为观察到的物体会在人视线中残留几十毫秒时间,当运动物体运动太快时,人肉眼所见未能 ...

  3. Unity3D-Shader-人物残影效果

    [旧博客转移 - 2016年1月7日 00:24 ] 前面的话 上一篇讲了一下人物边缘发光效果,链接: Unity-ShaderLab-实现X光效果,这次我们利用这个Shader来实现人物残影效果 先 ...

  4. cocos2dx - shader实现任意动画的残影效果

    本节主要讲利用cocos2dx机制实现opengl es shader脚本的绘制 这里先看下最终效果:                      这里分别实现了灰度效果及残影的效果. 一.绘制基类 这 ...

  5. 炫酷吊炸天的nodeppt

    由于要做一个关于node的分享,要准备写一个ppt方便就行交流.之前用的比较多的是slides(http://www.slides.com),最近知道了一个node写的工具,可以生成ppt,号称很强大 ...

  6. &colon;after和&colon;before炫酷用法总结

    引入 提到伪类,在我的印象中最常用的不过是:hover.:active.:link.:visited,还有css3里的常用伪类选择器:last-child.:first-child.nth-child ...

  7. canvas - 炫酷的3D星空

    1.国际惯例,先上效果 (⊙o⊙)… 效果图看上去效果并不很炫酷啊,直接戳 这里 看效果吧! 2代码部分 html: <canvas id="canvas" width=&q ...

  8. 炫酷的可视化工具包——cufflinks

    前言 学过Python数据分析的朋友都知道,在可视化的工具中,有很多优秀的三方库,比如matplotlib,seaborn,plotly,Boken,pyecharts等等.这些可视化库都有自己的特点 ...

  9. Unity3D游戏开发从零单排&lpar;三&rpar; - 极速创建狂拽酷炫的游戏地形

    提要 在Unity工作流程内,地形是一个必不可少的重要元素.不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们须要了解到地形的制作基本概念与,当中对于Unity的地形操作部分须要大量的 ...

随机推荐

  1. August 16th 2016 Week 34th Tuesday

    The worst solitude is to be destitute of sincere friendship. 最大的孤独莫过于没有真诚的友谊. Sometimes we pay the m ...

  2. Js 冒泡事件阻止

    Js 冒泡事件阻止   1. 事件目标 现在,事件处理程序中的变量event保存着事件对象.而event.target属性保存着发生事件的目标元素.这个属性是DOM API中规定的,但是没有被所有浏览 ...

  3. xheditor在线编辑器的使用

    在你所需要在线编辑器的工程目录下,导入xheditor_emot.xheditor_plugins和xheditor_skin.jquery四个文件夹,然后在textarea标签中加入: class= ...

  4. 服务器配置tomcat部署项目

    部署项目首先你需要把你的java web项目打包成war文件 在需要打包的项目上右键>选择[Export] 选中[Web]下面的[WAR file],点击[Next] 通过[Browse]选择保 ...

  5. 关于Idea里设置Terminal为Git&sol;bin&sol;bash&period;exe中文乱码的问题的终极解决方案

    1.这里如果设置为Git/git-bash.exe确实不会乱码,但是每次点Idea里的Terminal都会弹出一个单独的terminal窗口而非在idea子窗口里出现: 2.因此需要设置为Git/bi ...

  6. nginx 刷新显示404

    HTML5 History 模式 vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 ...

  7. python学习课件

    张鑫 18511446896 ------------------------------------------------------------------------------------- ...

  8. Python日志模块简单使用

    def loginfo(info): # create logger logger = logging.getLogger('[cpu and mem]**********') # Set defau ...

  9. JAVA中的static关键字&lpar;静态变量和成员变量&rpar;

    static的特点: 1.static是一个修饰符,用于修饰成员: 2.static修饰的成员被所有的对象所共享: 3.static优先于对象存在,因为static的成员随着类的加载就已经存在了: 4 ...

  10. Django的admin定制

    1,models编写 #encoding=utf-8 from django.db import models # Create your models here. class BookInfo(mo ...