Unity 控制物体透明度变化

1.需求

        给物体绑定一个脚本,这个脚本实现物体的透明度渐变变化,并且可以重置回原来的颜色。物体为Unity自带的材质Shader为Standard。

2.代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TransparentChanger : MonoBehaviour
{/// <summary>/// 保存原颜色/// </summary>private Color[] oldColors;/// <summary>/// 控制透明度变化/// </summary>[Range(0, 1)]public float nalpha;private void Start(){Init();}private void Update(){SetOpacity(nalpha);}public void Init(){int num = 0;foreach (Renderer r in GetComponentsInChildren<Renderer>(true)){num += r.materials.Length;}oldColors = new Color[num];num = 0;foreach (Renderer r in GetComponentsInChildren<Renderer>(true)){foreach (Material m in r.materials){try{oldColors[num++] = m.color;}catch (System.Exception e){Debug.Log(e.Message);}}}}/// <summary>/// 重置回原来的颜色/// </summary>public void Reset(){int num = 0;foreach (Renderer r in GetComponentsInChildren<Renderer>(true)){foreach (Material m in r.materials){try{m.color = oldColors[num++];if (m.color.a >= 1){ChangeMaterialType(0, m);m.renderQueue = -1;}}catch (System.Exception e){Debug.Log(e.Message);}}}}public void SetOpacity(float alpha){int num = 0;foreach (Renderer r in GetComponentsInChildren<Renderer>(true)){foreach (Material m in r.materials){try{float mA = Mathf.Min(alpha, oldColors[num++].a);m.color = new Color(m.color.r, m.color.g, m.color.b, mA);if (mA >= 0.98f){ChangeMaterialType(0, m);}else{ChangeMaterialType(1, m);}}catch (System.Exception e){Debug.Log(e.Message);}}}}/// <summary>/// 切换材质的Standard Shader 渲染类型/// </summary>/// <param name="mType">0-Opaque, 1-Transparent</param>/// <param name="m">材质</param>void ChangeMaterialType(int mType, Material m){if(mType == 0){m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);m.SetInt("_ZWrite", 1);m.DisableKeyword("_ALPHATEST_ON");m.DisableKeyword("_ALPHABLEND_ON");m.DisableKeyword("_ALPHAPREMULTIPLY_ON");m.renderQueue = -1;}else if(mType == 1){m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);m.SetInt("_ZWrite", 0);m.DisableKeyword("_ALPHATEST_ON");m.DisableKeyword("_ALPHABLEND_ON");m.EnableKeyword("_ALPHAPREMULTIPLY_ON");m.renderQueue = 3000;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pgsql 时区查看和修改

建议使用UTC时区&#xff0c;或者和linux、后端程序的时区保持一致&#xff0c;否则容易出现时间的差别。 pgsql的时间字段有一个带时区的timestamp with time zone&#xff0c;如果业务涉及多个时区&#xff0c;建议使用这个字段。 相关链接参考&#xff1a; linux时区设置和…

Git 教程

目录 Git 与 SVN 区别 Git 快速入门 学习目录 git简明指南 Git 安装配置 Git 工作流程、工作区、暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 Git 标签 Git 远程仓库(Github) Git 服务器搭建 Git 是一个开源的分布式版本控…

如何写老客户开发信?维护客户邮件怎么写?

老客户开发信的写作技巧&#xff1f;针对老客户的营销邮件模板&#xff1f; 老客户开发信是维护和发展客户关系的关键工具之一。通过巧妙的信函&#xff0c;您可以巩固与老客户之间的联系&#xff0c;促使他们继续购买您的产品或服务。在本文中&#xff0c;蜂邮将分享一些建议…

多线程股吧用户信息爬取

今天分享一些代码&#xff0c;欢迎参考和学习&#xff0c;在上一篇博客的基础上加入了多线程&#xff0c;使得速度提升了十几倍&#xff0c;代码如下&#xff1a; import csv import random import re import threadingimport chardet import pandas as pd from bs4 import Be…

小程序Tab栏与页面滚动联动

小程序tab栏切换与页面滚动联动 tab栏与页面滚动联动点击tab栏页面跳到指定位置滚动页面时切换tab栏 tab栏与页面滚动联动 在进行小程序开发时&#xff0c;需要实现点击tab栏页面滚动到某一指定位置&#xff0c;并且滚动页面时&#xff0c;小程序的tab栏进行切换。 在一开始&a…

黑苹果新手指导:名词解释常用软件常见问题说明

黑苹果新手指导&#xff1a;名词解释&常用软件&常见问题说明 写在前面名词解释系统篇引导篇工具篇 常见问题安装篇如何安装黑苹果&#xff1f;安装过程中卡在一排号怎么办&#xff1f;AMD处理器可以安装黑苹果 macOS吗&#xff1f;我的笔记本电脑为什么不能驱动独立显卡…

uni-app - 日期 · 时间选择器

目录 1.基本介绍 2.案例介绍 ①注意事项&#xff1a; ②效果展示 3.代码展示 ①view部分 ②js部分 ③css样式 1.基本介绍 从底部弹起的滚动选择器。支持五种选择器&#xff0c;通过mode来区分&#xff0c;分别是普通选择器&#xff0c;多列选择器&#xff0c;时间选择器&a…

虹科分享 | 平衡速度和优先级:为多样化的实时需求打造嵌入式网络(2)——实时通信系统的需求

现代实时应用的复杂性和需求不断增加&#xff0c;需要强大而可靠的通信系统。正如本系列第一部分所述&#xff0c;这些应用涵盖从秒到毫秒的广泛响应时间要求&#xff0c;它们的成功通常取决于其响应的精确时间。因此&#xff0c;所选的通信系统必须能够满足这些严格的时序限制…

API之 要求接口上传pdf 以 合同PDF的二进制数据,multpart方式上传

实现 //时间戳13位毫秒private function getMillisecond() {list($s1,$s2) explode( ,microtime());return (float)sprintf(%.0f,(floatval($s1) floatval($s2)) * 1000);}// 组装参数private function gysscPost1($url,$data){// $data[timestamp] 1694402111964;$data[tim…

自然语言处理常用方法和评价指标

常用方法 文本分类&#xff1a;如情感分析、主题标签分类。使用方法如朴素贝叶斯、支持向量机、神经网络等。信息提取&#xff1a;从文本中提取结构化信息&#xff0c;如命名实体识别&#xff08;NER&#xff09;、关系提取。语义分析&#xff1a;理解文本的含义&#xff0c;包…

怎么批量提取文件名字到Excel中?

怎么批量提取文件名字到Excel中&#xff1f;Excel是由微软公司开发的一种电子表格软件&#xff0c;它是Microsoft Office办公套件的一部分。Excel提供了强大的数据处理和分析功能&#xff0c;用户可以使用Excel创建、编辑和管理电子表格&#xff0c;进行各种计算、数据分析、图…

【C++ 学习 ㊴】- 详解 C++ 的 I/O 流

目录 一、C 的 I/O 流 二、C 的标准 I/O 流 三、C 的文件 I/O 流 一、C 的 I/O 流 C 语言有一套完成数据读写&#xff08;I/O&#xff09;的解决方案&#xff1a; 使用 scanf()、gets() 等函数从键盘读取数据&#xff0c;使用 printf()、puts() 等函数向屏幕输出数据&#…

909-2014-T2

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 二叉树采用二叉链表存储结构&#xff0c;设计算法&#xff0c;判断二叉树是否为满二叉树。叙述算法思想并给出算法实现。 2.算法思想 通过一次遍历&#xff0c;得到结点个数和树的高度。用结点个数和树的高…

C/C++ 实现:自然排序:针对两个需要排序的字符串,不仅逐个比较每个字符的顺序,对于连在一起的数字字符会作为一个完整数字进行比较 某知名企业的笔试题

目录 题目描述: 分析: 代码实现: 完整代码: 运行结果: 题目描述: 下面是一个自然排序函数的声明,请实现该函数; 自然排序是指:针对两个需要排序的字符串,不仅逐个比较每个

linux驱动开发.之spi测试工具spidev_test源码(一)

同i2c-tools工具类似&#xff0c;spidev_test是用来测试SPI BUS的用户态程序&#xff0c;其源码存在kernel目录下的tools下&#xff0c;具体为tools\spi\spidev_test.c。buildroot同样也提供名为spidev_test的package&#xff0c;可以直接进行编译&#xff0c;方便用户调试spi总…

Maven optional的作用

Maven optional的作用 这里的optional作用&#xff0c;可参考How do optional dependencies work?。 Project-A -> Project-BThe diagram above says that Project-A depends on Project-B. When A declares B as an optional dependency in its POM, this relationship …

Python-对象与json互转-json读写-文件读写

文章目录 1.json2.类对象序列化3.调用exe进行数据交换4.总结 1.json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999…

全国市政公用事业和邮政、电信业发展数据,shp/excel格式

随着城市化进程的加速和人们对城市生活品质要求的提高&#xff0c;市政公用事业和邮政、电信业发展越来越受到关注。 今天我们来分享全国市政公用事业和邮政、电信业发展数据&#xff0c;为读者呈现一个更加全面的行业发展图景。 首先了解下数据的基本信息&#xff0c;格式为s…

2023亿发数字化智能工单,专业管理工单处理全流程,助力企业转型腾飞

伴随着智能化和信息化的不断深入&#xff0c;企业数字化转型势如腾飞。在这个过程中&#xff0c;工单管理成为生产、家电、后勤等多个管理场景下频繁应用的关键环节。如何满足管理方对设备、服务等智能化管理的需求&#xff0c;提升工单管理效率、规范管理流程&#xff0c;并实…