Unity编辑器紫色
紫色原因是因为编辑器内跑了其他平台的shader兼容性导致的,需要动态的去修改shader,主要用到Unity的api : Shader.Find(shaderName);
具体的工具代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ShaderManager
{public static ShaderManager Instance;public static ShaderManager GetInstance(){if (Instance == null){Instance = new ShaderManager();}return Instance;}List<Renderer> results = new List<Renderer>();List<Image> imageResults = new List<Image>();/// <summary>/// 修改一个AssetBundle内的所有shader/// </summary>public void ResetAllMaterials(AssetBundle bundle){//对Material进行更改var materials = bundle.LoadAllAssets<Material>();foreach (Material m in materials){var shaderName = m.shader.name;if (shaderName == "Hidden/InternalErrorShader")continue;var newShader = Find(shaderName);if (newShader != null){m.shader = newShader;}else{Debug.LogWarning("unable to refresh shader: " + shaderName + " in material " + m.name);}}//对GameObject进行更改var gameObjects = bundle.LoadAllAssets<GameObject>();foreach (var go in gameObjects){results.Clear();//物件上的材质go.GetComponentsInChildren<Renderer>(true, results);if (results.Count > 0){for (int ii = 0; ii < results.Count; ii++){for (int k = 0; k < results[ii].sharedMaterials.Length; ++k){var m = results[ii].sharedMaterials[k];UseEditorShader(m);}//粒子if (results[ii] is ParticleSystemRenderer particleRender){UseEditorShader(particleRender.sharedMaterial);UseEditorShader(particleRender.trailMaterial);}}}//贴图上的材质imageResults.Clear();go.GetComponentsInChildren<Image>(true, imageResults);if (imageResults.Count > 0){for (int ii = 0; ii < imageResults.Count; ii++){UseEditorShader(imageResults[ii].material);}}}}/// <summary>/// 修改单个物件的Shader/// </summary>/// <param name="go"></param>public void ResetEditorShader(GameObject go){if (go == null){return;}results.Clear();go.GetComponentsInChildren<Renderer>(true, results);if (results.Count > 0){for (int ii = 0; ii < results.Count; ii++){for (int k = 0; k < results[ii].sharedMaterials.Length; ++k){var m = results[ii].sharedMaterials[k];UseEditorShader(m);}}}}void UseEditorShader(ref Shader shader){if (shader == null)return;var shaderName = shader.name;var newShader = Find(shaderName);if (newShader != null)shader = newShader;}void UseEditorShader(Material material){if (material == null || material.shader == null)return;var shaderName = material.shader.name;var newShader = Find(shaderName);if (newShader != null)material.shader = newShader;}Shader Find(string shaderName){Shader outShader = Shader.Find(shaderName);if (outShader == null){outShader = Shader.Find("Standard");}return outShader;}
}
Shader的添加形式大概有两种:
- 跟随AssetBundle 打进包里面,可以直接使用
ShaderManager.GetInstance().ResetAllMaterials(bundleInfo.bundle); - 自建材质
material = new Material(shader); #if EDITOR_RUN_OTHER_PLATmaterial.shader = Shader.Find(material.shader.name); #endif
相关文章:
Unity编辑器紫色
紫色原因是因为编辑器内跑了其他平台的shader兼容性导致的,需要动态的去修改shader,主要用到Unity的api : Shader.Find(shaderName); 具体的工具代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine…...
冒泡排序(C语言)
void BubbleSort(int arr[], int len) {int i, j, temp;for (i 0; i < len; i){for (j len - 1; j > i; j--){if (arr[j] > arr[j 1]){temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}} } 优化: 设置标志位flag,如果发生了交换flag设置…...
Unity中Shader观察空间推导(在Shader中实现)
文章目录 前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵2、求平移变换矩阵3、相乘得出 观察空间转化矩阵4、得到顶点的世界空间坐标,然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕 二、最终效…...
Hive04_DDL操作
Hive DDL操作 1 DDL 数据定义 1.1 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)];[IF NOT EXISTS] :判断是否存在 [COMMENT database_c…...
odoo17核心概念view4——view.js
这是view系列的第四篇文章,专门介绍View组件。 作为一个Component,它总共包含js、css、xml三个标准文件,当然最重要的是view.js 首先在setup函数中对传入的参数props做了各种校验,然后扩展了subenv useSubEnv({keepLast: new Kee…...
Centos7 openSSL
阅读时长:10分钟 本文内容: 在阿里云Centos7上部署python3.10.6项目时遇到openSSL协议不支持,导致无法下载第三方包 本文目的: 通过手动编译,升级openssl版本centos7 重编译 python3.10.6github下载缓慢解决镜像源记录…...
Web 安全之文件下载漏洞详解
目录 引言 文件下载漏洞原理 文件下载漏洞的危害 文件下载漏洞类型 文件下载漏洞的利用方法 文件下载漏洞示例 文件下载漏洞的防护措施 漏洞检测与测试 小结 引言 在数字化时代,文件下载是网络应用程序的重要的功能之一,用户可以通过这一功能获…...
搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法
搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信,可支持RS485(MODBUS RTU)协议、RS485-HS协议,广泛应用于物流仓储,立库 AGV|无人叉车|搬送机器人等领域,常用定位、驻车等,本篇重点介绍CNS-RF…...
使用ZMQ.proxy实现ZMQ PUB消息转发
MQ.proxy 是 ZeroMQ 库中的一个功能,用于创建一个简单的代理服务器。它可以将消息从一个套接字传递到另一个套接字,实现消息的转发和路由。 要使用 ZMQ.proxy,需要按照以下步骤进行操作: 创建两个 ZMQ.Socket 对象:一个…...
若依SQL Server开发使用教程
1. sys_menu表中的将菜单ID修改为自动ID,解决不能增加菜单的问题,操作流程如下: 解决方案如下 菜单栏->工具->选项 点击设计器,去掉阻止保存要求更新创建表的更改选项,点确认既可以保存了 2 自动生成代码找不表的解决方案…...
Mysql5.7服务器选项、系统变量和状态变量参考
官网地址:MySQL :: MySQL 5.7 Reference Manual :: 5.1.3 Server Option, System Variable, and Status Variable Reference 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. MySQL 5.7 参考手册 / ..…...
【Qt-Qss-Style】
Qt编程指南 ■ Qss■ Style■ setStyleSheet ■ style.qss■ border■ 去除弹框背景圆角■ QProgressBar样式表 ■ Qss Qt 支持很多种常见 符号 “>”代表直属子部件,说明两个控件之间是父子关系。 “#”代表后面的字段是前面控件类型的名称,当然也可…...
基于yolov8,制作停车位计数器(附源码)
大家好,YOLO(You Only Look Once) 是由Joseph Redmon和Ali开发的一种对象检测和图像分割模型。 YOLO的第一个版本于2015年发布,由于其高速度和准确性,瞬间得到了广大AI爱好者的喜爱。 Ultralytics YOLOv8则是一款前沿、最先进(SOTA)的模型&a…...
C++设计模式:单例模式(饿汉式、懒汉式)
单例模式是什么? 单例模式是一种创建型的软件设计模式。通过单例模式的设计,使得创建的类在当前进程中只有唯一一个实例,并提供一个全局性的访问点,这样可以规避因频繁创建对象而导致的内存飙升情况。 单例模式有三个要点 私有化…...
Django 访问前端页面一直在转异常:ReferenceError:axios is not defined
访问:http://127.0.0.1:8080/ my.html 一、异常: 二、原因 提示:axios找不到!! 查看代码<script src"https://unpkg.com/axios/dist/axios.min.js"></script>无法访问到官网 三、解决 Using j…...
C语言中关于指针的理解
#include <stdio.h> int main() {int a11;int *p&a; //因为a是整型的,所以我们定义指针p的时候要和a的类型一样char b;char *pa&b; //同理,b是字符型,所以这里的pa也要用字符型return 0; }因为*p指向的是地址&…...
MySQL MVCC精讲
版本链 我们前面说过,对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL的UNIQUE键时都不会包含row_id列): trx_idÿ…...
如何快速删除pdf周围的空白
问题:写论文往往需要pdf格式的图片,但pdf往往四周存在大量空白需要手动截图很麻烦 解决: 打开命令行输入:pdfcrop 图片名.pdf...
蓝桥杯c/c++程序设计——数位排序
数位排序【第十三届】【省赛】【C组】 题目描述 小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。 当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。 例如࿰…...
【通讯录案例-搭建登录界面 Objective-C语言】
一、来看我们这个通讯录案例 1.接下来啊,我们来做这个通讯录案例, 然后呢,做这么一个应用程序啊, 我们第一步呢,先把界面儿搭了, 然后呢,搭之前,简单的来分析一下, 首先呢,这是,中间儿的这一块儿, 1)有个“账户”、“密码”,这一块儿, 这是一个什么控制器,…...
配置MyBatis-Plus打印执行的 SQL 语句到控制台或日志文件中
配置MyBatis-Plus打印 1. 使用 log4j 或 logback 配置 MyBatis-Plus 支持多种日志框架,如 SLF4J, Commons Logging, Log4J, Log4J2 和 JDK logging。这里以 Logback 为例说明如何配置。 在你的 logback.xml 文件中添加如下配置: <configuration>&l…...
STM32开发中的C语言核心技巧与实战
1. STM32开发中的C语言核心技巧解析从事嵌入式开发十多年来,我深刻体会到C语言在STM32单片机开发中的核心地位。与通用计算机编程不同,嵌入式C语言需要直接操作硬件寄存器,对代码的精确性和效率要求极高。下面我将分享几个在STM32开发中最实用…...
智谱CEO张鹏:将推理性能压榨至极限 不为短期盈利,而是为高质量Token消耗指数曲线
雷递网 乐天 3月31日智谱CEO张鹏今日在智谱2025年年报沟通会上表示,智谱曾经历过质疑,经历过挫折,但无数事实反复验证了一个判断——智能上界的提升,是大模型AGI时代唯一的"第一性"。张鹏说,AGI时代的商业价…...
ESP32 RMT硬件驱动RF遥控库:替代rc-switch的异步OOK方案
1. 项目概述RCSwitchRmt 是一款专为 ESP32 系列微控制器设计的射频(RF)OOK(On-Off Keying,开关键控)通信库,其核心目标是提供一种现代、异步、非阻塞的硬件驱动型替代方案,以取代广为人知但已显…...
AI开发AI:借助快马多模型能力,迭代式构建你的智能健康管理Agent
最近在尝试开发一个健康管理AI助手,发现用传统方式写代码调试特别耗时。后来尝试了InsCode(快马)平台,发现用AI对话的方式迭代开发简直打开了新世界。记录下这个"用AI开发AI"的完整过程: 基础框架搭建 最开始只需要一个能交互的对话…...
小型纯电动汽车轮毂电机及大角度转向系统的数字化设计【含catia、solidworks、CAD图纸、答辩PPT、说明书】
小型纯电动汽车轮毂电机与大角度转向系统的数字化设计,是新能源汽车领域的关键技术突破方向。轮毂电机通过将驱动装置集成于车轮内部,实现了动力传递路径的简化与能量利用效率的提升,其分布式驱动特性使车辆具备更灵活的扭矩分配能力…...
EmbeddingGemma-300m部署指南:Ollama镜像+Prometheus监控+日志追踪一体化
EmbeddingGemma-300m部署指南:Ollama镜像Prometheus监控日志追踪一体化 想快速搭建一个功能强大、易于管理的文本向量化服务吗?EmbeddingGemma-300m作为谷歌推出的轻量级嵌入模型,凭借其3亿参数和出色的性能,是构建本地语义搜索、…...
dig (Domain Information Groper):从命令行到自动化运维的DNS探秘
1. 从命令行工具到运维利器的dig进化史 第一次接触dig命令时,我正被一个诡异的域名解析问题困扰。当时作为新手运维,只会用ping和nslookup反复测试,直到同事甩给我一行dig trace example.com——瞬间看到了完整的DNS解析链条,那种…...
从“看见光点”到“看懂世界”:视觉重建让这个世界变得更近一些
三十多年前,“让盲人重新看见”更像一句带有未来感的科学想象。而今天,这件事已经进入临床试验和真实的人体研究。视觉重建之所以被视为脑机接口里最具挑战性的方向之一,不只是因为它要解决“能不能刺激大脑”的问题,更因为它要回…...
PX4固件二次开发入门:从源码结构到第一个自定义模块(基于v1.11版本)
PX4固件二次开发实战:从源码解析到自定义模块开发(v1.11版本) 当你第一次打开PX4的源码仓库,面对数十个文件夹和数千个文件时,那种扑面而来的压迫感我深有体会。作为过来人,我想分享一套系统性的二次开发方…...
