很久之前我写过一篇用对象池等知识实现的2D的残影效果
好像有挺多小伙伴看的添加链接描述
然后这几天我有入门了一下shader 接触了透明的效果
之后我就飘了 想实现一下3D残影的效果
但是这个仅限于unity自带的规则物体 我这用的是球(sphere)
而且我写的代码没有做优化 可能有点混乱

老规矩我还是给出demo吧

我这里的想法是 我弄几个小球 让后边的小球跟着前边的走
前边的后边 后边的就怎么走
这个我们利用unity的特性很容易可以实现

private void FixedUpdate(){transform.position = LastObject.position;}

这样就很容易的实现了小球的跟随效果

这时候我们就想到了透明的效果了
我们要用shader自己去写一个材质

Shader "Custom/Chapter"
{Properties{_MainTex("Main Texture",2D) = "white"{}_BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0)_AlphaScale("Alpha Threshold",Range(0,1)) = 1}SubShader{Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}//记住Transparent就完事了pass{ZWrite OnColorMask 0    // 控制该Pass不输出任何颜色}pass{ZWrite OffBlend SrcAlpha OneMinusSrcAlpha//关闭深度写入,同时开启混合。这里我们的混合因子选择了SrcAlpha 和OneMinueSrcAlpha//这两个计算因子最终可以得到半透明混合的效果。Tags{"LightMode"="ForwardBase"}//不变CGPROGRAM#pragma vertex Vertex#pragma fragment Pixel#include "Lighting.cginc"struct vertexInput{float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};struct vertexOutput{float4 pos : SV_POSITION;float3 worldNormal : TEXCOORD0;float3 worldPos : TEXCOORD1;float2 uv : TEXCOORD2;};sampler2D _MainTex;fixed4 _BaseColor;fixed _AlphaScale;vertexOutput Vertex(vertexInput v){vertexOutput o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);o.uv = v.texcoord;return o;}fixed4 Pixel(vertexOutput i):SV_TARGET{fixed3 worldNormal = normalize(i.worldNormal);fixed3 lightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 albedo = tex2D(_MainTex,i.uv).xyz * _BaseColor.xyz;fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;fixed3 diffuse = _LightColor0.xyz * albedo * saturate(dot(worldNormal,lightDir));return fixed4(diffuse + ambient,_AlphaScale);}ENDCG}}
}

然后我们可以通过c#中的方法来修改透明度 从而实现残影的效果

  private void Start(){lattmat = GetComponent<Renderer>().material;}private void Update(){lattmat.SetFloat("_AlphaScale", alpyh);}

之后我们就要思考 怎么能把后边的球联系起来

  public followobject lastscript;//上一个物体的脚本public Transform  LastObject;//上一个物体private  Material lattmat;//本物体的材质public float alpyh;//设置的透明度

之后我们在unity中赋值

这里的赋值都上上一个物体

然后我给出完整的源码 给大家参考

后边子物体的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class followobject : MonoBehaviour
{public followobject lastscript;//上一个物体的脚本public Transform  LastObject;//上一个物体private  Material lattmat;//本物体的材质public float alpyh;//设置的透明度private void Start(){lattmat = GetComponent<Renderer>().material;}private void Update(){lattmat.SetFloat("_AlphaScale", alpyh);}private void FixedUpdate(){transform.position = LastObject.position;if (lastscript == null){alpyh = ConShader.Instance.a;}else{alpyh = lastscript.alpyh;}}}

可键盘控制的物体

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ConShader : MonoBehaviour
{public float a = 1;public bool isstart = false;public static ConShader Instance;private void Awake(){Instance = this;}private void Update(){transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * Time.deltaTime * 20);if (isstart){a -= Time.deltaTime;}if (a < 0){isstart = false;a = 0;}if (Input.GetKeyDown(KeyCode.Space)){a = 1;isstart = true;}}
}

shader源码

Shader "Custom/Chapter"
{Properties{_MainTex("Main Texture",2D) = "white"{}_BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0)_AlphaScale("Alpha Threshold",Range(0,1)) = 1}SubShader{Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}//记住Transparent就完事了pass{ZWrite OnColorMask 0    // 控制该Pass不输出任何颜色}pass{ZWrite OffBlend SrcAlpha OneMinusSrcAlpha//关闭深度写入,同时开启混合。这里我们的混合因子选择了SrcAlpha 和OneMinueSrcAlpha//这两个计算因子最终可以得到半透明混合的效果。Tags{"LightMode"="ForwardBase"}//不变CGPROGRAM#pragma vertex Vertex#pragma fragment Pixel#include "Lighting.cginc"struct vertexInput{float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};struct vertexOutput{float4 pos : SV_POSITION;float3 worldNormal : TEXCOORD0;float3 worldPos : TEXCOORD1;float2 uv : TEXCOORD2;};sampler2D _MainTex;fixed4 _BaseColor;fixed _AlphaScale;vertexOutput Vertex(vertexInput v){vertexOutput o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);o.uv = v.texcoord;return o;}fixed4 Pixel(vertexOutput i):SV_TARGET{fixed3 worldNormal = normalize(i.worldNormal);fixed3 lightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 albedo = tex2D(_MainTex,i.uv).xyz * _BaseColor.xyz;fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;fixed3 diffuse = _LightColor0.xyz * albedo * saturate(dot(worldNormal,lightDir));return fixed4(diffuse + ambient,_AlphaScale);}ENDCG}}
}

希望我所写的对大家有所帮助
如果有问题可以联系我 主页有我的联系方式

unity实现3D物体的残影效果相关推荐

  1. Unity学习笔记(8) Unity残影效果整理,3D、2D、通用方案

    Unity做残影效果是个不难的工作. 但是一些细节会对使用方法产生限制,这里整理一下各种情况下推荐的残影效果实现方案 1.3D网格 (高性能) 2.2D人物 (非骨骼动画) (高性能) 3.其它场景 ...

  2. Unity中实现3D人物残影效果

    一:效果演示 二:思路 --使用SkinnedMeshRenderer类中的BakeMesh方法去复制出新的Mesh --再使用Graphics.DrawMesh绘制会Mesh 三:核心代码实现 -- ...

  3. 【Unity】动作游戏开发实战详细分析-25-角色残影效果的实现

    [Unity]动作游戏开发实战详细分析-25-角色残影效果的实现 基本思路 Unity中的蒙皮网格组件提供了一个接口BakeMesh,允许我们拿到当前动画帧的网格数据,借此可对烘焙网格使用半透明的边缘 ...

  4. 残影效果在URP中的实现及性能优化

    快速跳转 残影效果概述 对象池创建对象 残影数量未达到最大 残影数量达到最大 对象池技术优化 残影生成逻辑 生成残影的时机 残影材质处理 残影材质赋予 残影材质更新 残影动画匹配 实例化绘制 其他优化 ...

  5. cocoscreator,RenderTexture实现残影效果

    效果图如下: 实现方法: 1.将需要产生残影的物体单独设置为一个Group: 2.新建两个sprite,设置为和残影物体相同Group,一个用于显示当前帧的残影,一个保存上一帧的残影用于摄像机渲染,修 ...

  6. 游戏中制作酷炫拖尾残影效果实战

    发现好多人都想要这个拖尾残影的效果,今天贴出来. 今天制作拖尾残影效果,效果如图:两个视角 我的游戏中角色有冲刺技能,冲刺中身后要有一个残影效果,这种效果就满足了,现在分享给大家如何制作. 1.观察需 ...

  7. Unity实现3D物体叠加到摄像头画面上

    关注公众号 风色年代(itfantasycc) 200G 游戏开发资料合集送上~ 原文地址:unity如何实现3D物体叠加到摄像头画面上_海涛高软-CSDN博客 实现效果如下:  功能:  1 打开摄 ...

  8. unity 将3D物体显示在UI前面(保姆级 超容易)

    将3D物体放置在UI界面 在网上看了一些教程,这篇文章就是在前人的基础上稍加简化. 总结下来,其实只需要: 加一个相机 加一个Render Texture 加一个Raw Image 接下来是详细步骤 ...

  9. 高通ar,unity实现3D物体识别,图片识别

    话不多说,直接上干货 1.实现的效果: 2.使用步骤: (一)高通官网申请免费key值  (二)创建database (三)创建target 特别说明,此处target分为图片,3d实体模型,以及立方 ...

最新文章

  1. 二叉搜索树的第 k 大节点(递归,反中序遍历 + 提前返回)
  2. awk,sed,cut获取最后一列数据
  3. LED和LCD的区别
  4. 白话Elasticsearch03- 结构化搜索之基于bool组合多个filter条件来搜索数据
  5. JAVA CXF、XFIRE、AXIS webservice获取客户端IP
  6. ThreadPoolExecutor的七个参数详解
  7. Java 运算符、表达式、语句
  8. 苹果cms V10模板 仿优酷网PC模板+wap模板
  9. wordpress linux伪静态,nginx下wordpress伪静态设置
  10. CF1228C. Primes and Multiplication(数学)
  11. POJ1011 HDU1455 UVA307 UVALive5522 Sticks题解
  12. 《社交网站界面设计(原书第2版)》——3.6 指纹或Bio指纹
  13. FR跨SHEET条件汇总
  14. 所有ghost操作系统大全
  15. 数学实验matlab韩明版答案,数学实验(MATLAB版)[韩明,王家宝,李林 编著] 2012年版...
  16. sap abap开发从入门到精通_给你的ABAP对象打上标签(Tag)
  17. BT601和BT709到底什么关系
  18. python大学课本_求推荐一本大学Python教材|python基础教程用书
  19. python中grid的用法_python pack()和grid()方法一起使用
  20. 如何在Kubernetes中部署nginx

热门文章

  1. 图像质量评价matlab实现(含代码)
  2. Java知识点思维导图
  3. DM数据库使用DMRMAN备份与还原(二)
  4. OPPO 智能电视 K9x 43 英寸版 评测
  5. c# 在word中插入表格
  6. 收购无他相机后,天鸽互动已呈现更大的投资价值
  7. 攻防演练丨赛宁红方管控平台走进广东三地 助力数字政府网络安全建设
  8. 为女朋友写一个小程序(一)— —目的与需求
  9. 机器学习_KL散度详解(全网最详细)
  10. sulfo-CY3(Cyanine3) DBCO,磺酸基-花青素CY5二苯并环辛炔,1782950-79-1