为什么通过GetComponent获取的组件,有时修改会无效?
来源:互联网 发布:问答cms 编辑:程序博客网 时间:2024/06/13 01:46
这几天正在学unity,突然遇到一个关于GetComponent的一个问题,我百思不得其解
public class MeshAndMat : MonoBehaviour{ public Mesh meshDemo; private Mesh targetMesh; private Material mat; void Start () { targetMesh = GetComponent<MeshFilter>().mesh; targetMesh = meshDemo; mat = GetComponent<MeshRenderer>().material; mat.color = Color.black; }
这段代码很简单,我想修改一个正方体Cube变成圆柱体,同时修改它的颜色变成黑色
meshDemo是一个圆柱体,我通过targetMesh获取了正方体身上的mesh,通过mat获取了正方体身上的material
然后直接赋值,让targetMesh赋值成圆柱体,颜色变成黑色。
我直接说结果吧,它没有变成圆柱体,仍然是个Cube,但是颜色却变成了黑色。
这样我百思不得其解,我都是同样获取了组件,为什么一个修改成功了,一个修改却失败了呢?
细心的人可能已经发现问题了,我targetMesh获取的是MeshFilter组件下的mesh变量,而mat获取的是MeshRenderer下的material
而修改的时候,targetMesh是直接赋值,而mat是修改material下的color变量
然后我尝试了反过来写这段代码
public class MeshAndMat : MonoBehaviour{ public Mesh meshDemo; private Mesh targetMesh; private Material mat; private MeshFilter mf; private Color coco; void Start () { //targetMesh = GetComponent<MeshFilter>().mesh; //targetMesh = meshDemo; //mat = GetComponent<MeshRenderer>().material; //mat.color = Color.black; mf = GetComponent<MeshFilter>(); mf.mesh = meshDemo; coco = GetComponent<MeshRenderer>().material.color; coco=Color.black; }mf对应之前的targetMesh,coco对应之前的mat
运行这段代码,正方形成功的变成了圆柱体,但是颜色没有变成黑色
这是因为如果直接获取的是组件下的变量的话,你不能直接修改这个变量,你可以直接修改这个变量下的各种参数,但不能直接修改它本体
就是只能直接修改这个组件/变量的下一级变量/参数
我是这么理解的:两者不在同一个内存地址,即使修改了targetMesh的内存地址,GetComponent<MeshFilter>().mesh本身的内存地址并没有变,所以该是正方体还是正方体。
你可以通过获取上一级的方式直接修改它。就如同第二段代码,mf = GetComponent<MeshFilter>();,然后修改mf下的变量mesh="你要改成的mesh",这是可以直接修改的。
以上都是我个人理解,如有不对请指出。
阅读全文
0 0
- 为什么通过GetComponent获取的组件,有时修改会无效?
- Unity通过Attribute代替getComponent获取组件
- GetComponent 获取其它脚本组件变量
- 通过类似GetComponent从组件中直接获得接口的三种方式
- Android Layout的layout_height等属性为什么有时会不起作用?
- unity5.x Translate平移移动 以及GetComponent获取组件
- 为什么有时读取XML文件会失败
- 解决在WM_ACTIVATE中调用ShowWindow有时会无效的我问题
- 为什么我的hosts文件修改无效?
- Problem shooting:为什么有时在Android平台上通过代理网关访问HTTPS网站会出现连接失败
- 为什么会产生无效对象
- 为什么Oracle有时会用索引来查找数据?--强制Oracle使用最优的“执行计划”
- 为什么Oracle有时会用索引来查找数据?--强制Oracle使用最优的“执行计划”
- Linux命令返回值为什么有时会和预计的不一样
- 友盟iOS推送为什么有时会出现生产环境下收不到的情况?
- 通过连接池获取的连接无效
- 通过注解@Component方式,applicationContext有时会为null的问题解决方法
- getComponent()方法的应用
- 设计模式六大原则(4):接口隔离原则
- go基础-interface
- 图像标识:4邻域标记算法的两次扫描分析
- 从HashMap的源码来聊聊HashMap吧
- NYOJ19~擅长排列的小明
- 为什么通过GetComponent获取的组件,有时修改会无效?
- 关于Python爬虫无数据库的存储1之存储为csv格式
- 20. Valid Parentheses
- 20170705
- merge into user用法、oracle实例
- python 3 笔记1
- 机器学习-多元高斯分布(异常检测)
- springboot 1.5.3 源码分析(五):@SpringBootApplication注解,springboot注解
- 日记2017,12,17