编辑器下动态更换对象材质

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEditor;
 5
 6 [ExecuteInEditMode]
 7 public class SetMaterial : MonoBehaviour {
 8
 9 #if UNITY_EDITOR
10     [ContextMenu("SetMaterial")]
11     void SetObjsMaterial()
12     {
13         MeshRenderer[] renders = gameObject.GetComponentsInChildren<MeshRenderer>();
14
15         Material resMat = Resources.Load<Material>("Default_Materiall");
16
17         foreach (MeshRenderer render in renders)
18         {
19             render.material = resMat;
20         }
21     }
22
23     private void OnGUI()
24     {
25         MeshRenderer[] renders = gameObject.GetComponentsInChildren<MeshRenderer>();
26
27         Material resMat = Resources.Load<Material>("Default_Materiall");
28
29         foreach (MeshRenderer render in renders)
30         {
31             render.material = resMat;
32         }
33     }
34 #endif
35 }

说明:

[ExecuteInEditMode] : 表示在编辑器模式下执行OnGUI和Update
[ContextMenu("SetMaterial")] : 在编辑器下手动执行自定义方法
				
时间: 2024-10-06 16:59:46

编辑器下动态更换对象材质的相关文章

Unity3d热更新全书-加载(二)如何在不用AssetBundle的前提下动态加载预设

Unity3D的主要构成大家都知道,首先是场景图,场景图上的节点构成一颗树. 每个节点对应一个GameObject对象 然后每个GameObject有若干个组件 有一些组件会与资源产生关系,比如MeshRenderer会关联材质,材质会关联shader和贴图 场景图的一部分可以被保存为一个预设,prefab. 有时候我们会需要用预设去复用,而预设的加载似乎只能通过AB去打包,其实不然,这里我们有一个开源的库就可以解决这个问题. 为什么不使用AB,可以见上一篇,加载(一),不使用AB一份资源全平台

python动态获取对象的属性和方法 (转载)

首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__(self, name='Kitty'): self.name = name def sayHi(self): print self.name, 'says Hi!' cat = Cat() print Cat.sayHi print cat.sayHi 有时候我们会碰到这样的需求,需要执行对象的某

OSG立体模式下动态修改相机远近裁剪面的实现

1. 非立体模式下动态修改相机远近裁剪面 class GLB_DLLCLASS_EXPORT CGlbGlobeClipHandler : public osg::NodeCallback    { struct CustomProjClamper : public osg::CullSettings::ClampProjectionMatrixCallback  { template<class matrix_type, class value_type>            bool _

js动态添加对象

js的数组,字符串,对象操作是实现一些功能不可缺少的部分. 一般情况下js的数组和字符串动态加起来比较方便,都有自己提供的方法,数组的push(),字符串直接用加号等.但是js对象动态添加就需要一点工作了 下面我写了两种动态添加对象的方法 第一种 function toObj1(key,val){ var data = {}; data[key] = val; return data; } var obj1 = toObj1('name','nurdun'); console.log(obj1)

Linux系统下动态库的生成

Linux系统下动态库的生成 一.简述 Linux下动态库文件的扩展名为 ".so"(Shared Object).按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号).这样,线程函数库被称作libthread.so.静态库的文件名形式是libname.a.共享archive的文件名形式是libname.sa.共享archive只是一种过渡形式,帮助人们从静态库转变到动态库.      小编综合自己学习体会以及网络上较好的内容,以简单的例子介绍动态库文件的生

05---MVC模式下动态调整Cell高度三部曲

动态调整Cell高度三部曲 我们在做项目开发的过程中经常会遇到每一个cell的高度及cell的子控件的显示个数不同,以我最近开发的微格为例,讲解一下MVC模式动态的调整Cell宽高的三部曲 1>.自定义Cell,重写- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法 在此方法中添加所有的可能显示的子控件 子控件的frame通过构建的cellFrame模型进行设置

IE8下动态生成 option 无法设置文本内容

问题: 1.在IE8下,JS动态添加 option 的时候,value 有值,但是文本内容添加不上 例:<option value="北京"></option> var osheng = document.getElementById("osheng");//获取下拉框对象 var option = new Option("北京", "北京"); osheng.appendChild(option);/

Cglib根据数据库表数据动态生成对象

最近有个任务:根据查询SQL直接导出报表 实现关键是,怎么根据sql查询的数据动态生成对象列表,想到Cglib动态代理实现 废话少说,上代码: 定义动态生成Java Bean类: import java.util import net.sf.cglib.beans.{BeanGenerator, BeanMap} /** * 动态Bean生成 * * @author BarryWang create at 2018/6/19 11:54 * @version 0.0.1 */class Dyna

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam