首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何改变附加在一个GameObject上的多个材料

如何改变附加在一个GameObject上的多个材料
EN

Game Development用户
提问于 2021-06-14 02:39:05
回答 1查看 1.9K关注 0票数 0

我正在编写一个脚本,当悬停在上面时,它会改变选定对象的材料。这个物体(S)有多种材料附在一起。问题是,只有第一种材料正在改变,而其他材料则保持不变。当射线击中适用的物体时,它会改变颜色,当光线不再在物体上时,它就会改变回默认的颜色。我使用的是资产商店的SNAPS原型资产,不能编辑它们来使用一种材料,我也想不出如何让它们使用一种材料,如果有更简单的方法可以这样做,请告诉我。

下面是我尝试过的代码:

代码语言:javascript
运行
AI代码解释
复制
void Update()
    {
        if (_selection != null)
        {

            var selectionRenderer = _selection.GetComponent<Renderer>();
            Material[] materials = selectionRenderer.materials;
            foreach (Material mat in materials)
            {
                selectionRenderer.material = defaultMaterial;
            }

            _selection = null;
        }
        camera = Camera.main;
        Ray ray = camera.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
        {
            var selection = hit.transform;
            if (selection.CompareTag(selectableTag))
            {

                var selectionRenderer = selection.GetComponent<Renderer>();
                Material[] materials = selection.GetComponent<Renderer>().materials;
                if (selectionRenderer != null)
                {
                    foreach (Material mat in materials)
                    {
                        selectionRenderer.material = highlightMaterial;
                    }
                    _selection = selection;
                }

            }
        }
    }
EN

回答 1

Game Development用户

发布于 2021-06-14 04:53:55

你所做的是正确的是,你正在使用GetComponent<Renderer>().materials来获取所有的材料。但你做错的是,然后你用selectionRenderer.material = highlightMaterial设置材料。这一行使用渲染器的material属性,它总是只引用第一个材料。

为了更改对象上的每个材料,您需要替换整个.materials数组。

然而,很可能有更好的方法来做你想要做的事情。不鼓励通过这些属性访问渲染器的材料,因为每当您这样做时,就会在内存中创建一个全新的材料。新的材料不会与任何东西共享,所以你会强迫GPU做更多的抽奖电话。

临时更改对象呈现方式的更好方法是使用材料性能块。这些允许您覆盖一个或多个材料的个别设置,而无需切换渲染器实际使用的材料。例如,当您想要将一堆渲染器上的所有材料的发射颜色更改为黄色时:

代码语言:javascript
运行
AI代码解释
复制
foreach(var renderer in GetComponentsInChildren<Renderer>) {
    var propertyBlock = renderer.GetPropertyBlock();
    propertyBlock.SetColor("Emission", Color.yellow);
    renderer.SetPropertyBlock(propertyBlock);
}

注意:属性名称是按比例输入的。什么名字是可用的,他们做什么取决于着色器。很有可能,您的特定着色器的发射属性不是所谓的“发射”,而是其他的东西。

票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/194070

复制
相关文章
使用R语言在向量的任何位置插入任何元素
然后学员有任意需求,任意位置添加任意数字,这样写会比较麻烦,每次都有手动判断向量长度,范围等等,因为她是初学者,所以不可能会无限R包和函数,我这里简单演示一下:
生信技能树
2019/11/06
6.9K0
使用R语言在向量的任何位置插入任何元素
Python随机打乱列表中的元素
首先生成原列表的拷贝a_copy,新建一个空列表result,然后随机选取拷贝列表中的值存入空列表result,然后删除
宇宙之一粟
2020/10/26
6.8K0
python随机取list中的元素
一、对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过文件句柄对文件进行操作 3.关闭文件 二、文件打开模式 f = open("file_test","r",encoding = "utf-8")    #打开文件,“读模式”,只能读,得到文件句柄并赋值给一个变量 print(f.read())                     #读文件所有内容,读完之后文件光标跳到最后,文件大时慎用 f.close() f1 = open("file_test","w",encoding=
py3study
2020/01/08
1.7K0
Selenium WebDriver找不到元素的三种情况
原因:页面被刷新了。 在当前页面找不到这个元素了,但是你自己手动复制到页面开发者工具上查看明明有啊,为啥在代码里面就找不到了呢?这时,你还可能会问“可是明明元素就在那里,没有变,甚至我是回退回来的,页面都没有变,怎么会说是新页面?”。 其实呢是在操作的过程中页面发生了变化,刷新了,虽然表面上看起来两个元素长得一模一样,事实上是每一个元素都有自己的一个ID号。 用代码(Python)来证明!
软测小生
2019/07/05
5.4K0
Selenium WebDriver找不到元素的三种情况
Python——去除列表中的重复元素
set(['I', 'I', 'M', 'E']) set(['I', 'E', 'M']) 集合中,没有重复的元素。利用集合这种数据结构的特性,可以去除列表中的重复元素。 一个列表中可能含有重复元素,使用set()可以实现列表的去重处理,但是无法知道哪些元素是重复的,下面的函数用于找出哪些元素重复了,以及重复的次数。 from collections import Counter a = [1,4,2,3,2,3,4,2] b = Counter(a) #求数组中每个数字出现了几次 print(b)
瑞新
2020/07/07
5.1K0
python中删除列表中重复元素
在面试中,很可能遇到给定一个含有重复元素的列表,删除其中重复的元素,下边给出三种方法来实现这个功能。
全栈程序员站长
2022/09/07
4.2K0
Python中如何获取列表中重复元素的索引?
昨天分享了一个文章,Python中如何获取列表中重复元素的索引?,后来【瑜亮老师】看到文章之后,又提供了一个健壮性更强的代码出来,这里拿出来给大家分享下,一起学习交流。
前端皮皮
2022/08/17
13.8K0
Python中如何获取列表中重复元素的索引?
列表元素循环移位中Python切片的妙用
之前有个文章中介绍了列表循环移位的3中方法,原文请见:Python序列循环移位的3种方法 其中第二种方法虽然更直接地翻译了题目的要求,但是显得还是有点啰嗦,如果充分利用Python中的切片技术,可以写成下面更简洁的形式: >>> def demo(lst, k): x = lst[k-1::-1] y = lst[:k-1:-1] return list(reversed(x+y)) #测试用的列表 >>> lst = list(range(20)) #循环左移3位 >>> demo(l
Python小屋屋主
2018/04/16
5.8K0
【Python】集合 set ② ( 集合常用操作 | 集合中添加元素 | 集合中移除元素 | 集合中随机取出元素 )
集合添加元素代码示例 : 原集合中有两个 Tom 字符串 , 只保留后面的 Tom 字符串 ; 添加元素时 , 添加 Trump 元素 , 原集合中没有该元素 , 添加成功 ; 有添加 Tom 元素 , 此时原集合中存在该元素 , 本次添加 Tom 元素失败 ;
韩曙亮
2023/10/11
3080
【Python】集合 set ② ( 集合常用操作 | 集合中添加元素 | 集合中移除元素 | 集合中随机取出元素 )
VisualStudio找不到Python
最近在使用C/C++开发Python的扩展模块,由于笔记本的性能较差,因此没有使用VS自带的conda环境,而是自己安装了一个Python核心解释器,但是使用VS2019创建项目的时候,代码大片飘红,提示找不到Python.h,如下所示:
py3study
2020/01/10
3.6K0
VisualStudio找不到Python
【说站】python中XML删除元素
以上就是python中XML删除元素的方法,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
1K0
python数组_python在数组中查找指定元素
member = [‘a’,’b’,’c’,’1′,’2′,3]print “member[0]:”, member[0]
全栈程序员站长
2022/09/22
3.4K0
伪元素的作用_获取iframe中的元素
获取网页源代码也获取不了这些动态渲染的数据 所以用简单的,但是有点麻烦的方法 使用selenium执行js,或者直接在浏览器里面执行js
全栈程序员站长
2022/11/04
7.1K0
伪元素的作用_获取iframe中的元素
使用Python取列表元素中的城市名(上篇)
前几天在Python最强王者群【eric】问了一个Python列表基础的问题,这里拿出来给大家分享下。
前端皮皮
2023/08/17
4550
使用Python取列表元素中的城市名(上篇)
python:删除列表中特定元素的几种方法
终于刷到一条不看答案就能轻松解出来的题目,更重要的是学习到了几种删除列表中元素的方法,值得做一下笔记
冰霜
2022/03/19
8.6K0
python:删除列表中特定元素的几种方法
如何从 Python 列表中删除所有出现的元素?
在 Python 中,列表是一种非常常见且强大的数据类型。但有时候,我们需要从一个列表中删除特定元素,尤其是当这个元素出现多次时。本文将介绍如何使用简单而又有效的方法,从 Python 列表中删除所有出现的元素。
网络技术联盟站
2023/06/01
13.3K0
python操作txt文件中数据教程[2]-python提取txt文件中的行列元素
原始txt文件 程序实现后结果-将txt中元素提取并保存在csv中 程序实现 import csv filename = "./test/test.txt" Sum_log_file = "./te
演化计算与人工智能
2020/08/14
3K0
python操作txt文件中数据教程[2]-python提取txt文件中的行列元素
使用Python取列表元素中的城市名(下篇)
前几天在Python最强王者群【eric】问了一个Python列表基础的问题,这里拿出来给大家分享下。
前端皮皮
2023/08/17
3070
使用Python取列表元素中的城市名(下篇)
Python修改元组中的元素方法有哪些
上节课也介绍过,元组是不可变的数据类型,所以我们没有办法对他的内部元素进行诸如修改,删除和增加操作,但是语言就是这么神奇,不可以对元组本身操作,还可以把元组操作之后的结果重新存储成一个新的元组,这样不就能丰富元组的操作了吗。方法是完全可行的,但是多少有点局限性,下面我们就来尝试操作一下。
python自学网
2021/12/02
1.6K0
Python修改元组中的元素方法有哪些
python 替换字符串中的元素「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144908.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
2.9K0

相似问题

从程序员的角度来看,在开源项目上工作是不好的吗?

30

如何成为程序员团队的领导者?

40

从维护的角度来看,“否则”,如果没有插上支撑,是否安全?

110

各种编程概念(从Python的角度来看)

30

如何提供与企业系统的SaaS集成(从SaaS提供者的角度来看)?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档