这是我在做作品的过程中遇到的问题,大概阐述一下遇到的问题及解决思路。
1 问题阐述
因为是做天空盒,有很多变量需要控制,shader之间又想实现颜色、变量的传递,所以整个项目的所有暴露出来的可调整变量,我都汇总在了主脚本Skybox中,并把这个Skybox脚本挂在了Main Camera对象下:
又在场景中加入了面片云模型:
面片云需要自转,我希望暴露出一个参数能够控制面片云自转的速度,这个参数希望跟其他参数一起,都在Skybox脚本中控制:
那么问题就来了,云自转我是单独给云模型对象挂了一个Rotate脚本,现在这个Rotate脚本需要以某种方式访问到Skybox脚本中定义的Cloud Speed变量。
GameObject.Find()方法被我Pass了,效率很低,还有就是一堆需要各种访问父对象的方法,我觉得好麻烦。。
如果是静态变量,那好说,在脚本Skybox里定义,
pulbic static int CloudSpeed = 1;
脚本B就可以直接访问这个变量,
int speed = Skybox.CloudSpeed;
但现在这个变量需要可调控,意味着不能是静态变量。所以整个过程就是,脚本Rotate需要访问脚本Skybox中定义的动态变量CloudSpeed。
2 解决思路
我在Skybox脚本中定义CloudSpeed变量的同时,定义了一个方法,这个方法会返回定义变量的值:
[Range(1, 10)]
public int CloudSpeed = 1;
public int getCloudSpeed()
{
return CloudSpeed;
}
然后在Rotate脚本访问这个方法,
public Skybox skybox;
void Update()
{
cloudSpeed = skybox.getCloudSpeed();
}
然后把Rotate脚本挂在我的clouds对象下,拖入Main Camera对象就行,
以上就是我的解决思路了,当然可能饶了弯路,,不一定是最好的方法。