【Unity 脚本相关】实现脚本之间动态变量传递

这是我在做作品的过程中遇到的问题,大概阐述一下遇到的问题及解决思路。

1 问题阐述

因为是做天空盒,有很多变量需要控制,shader之间又想实现颜色、变量的传递,所以整个项目的所有暴露出来的可调整变量,我都汇总在了主脚本Skybox中,并把这个Skybox脚本挂在了Main Camera对象下:

【Unity 脚本相关】实现脚本之间动态变量传递_第1张图片

又在场景中加入了面片云模型:

【Unity 脚本相关】实现脚本之间动态变量传递_第2张图片

面片云需要自转,我希望暴露出一个参数能够控制面片云自转的速度,这个参数希望跟其他参数一起,都在Skybox脚本中控制:

【Unity 脚本相关】实现脚本之间动态变量传递_第3张图片

那么问题就来了,云自转我是单独给云模型对象挂了一个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对象就行,

【Unity 脚本相关】实现脚本之间动态变量传递_第4张图片

以上就是我的解决思路了,当然可能饶了弯路,,不一定是最好的方法。

你可能感兴趣的:(Unity学习,unity)