Unity3d 在运行期间更改unity项目设置

Unity3d 在运行期间更改unity项目设置,unity3d,Unity3d,我刚刚开始使用unity,我正在查看其他人的项目,了解它是如何工作的,而不是在没有任何知识的情况下直接进入自己的项目。我正在试验一个来自其他人github的unity项目,我一直很喜欢在游戏运行时操纵游戏设置,但我只是通过在unity项目编辑器(如果它叫inspect边栏)中播放场景来做到这一点。我希望在我建造和运行之后也能这样做,以获得更好的视野。有没有一种方法可以继续使用设置板,或者有没有一种方法可以将它们转换成游戏中的变量,我可以通过某种方式进行更改 下面是我从中获取代码的github:

我刚刚开始使用unity,我正在查看其他人的项目,了解它是如何工作的,而不是在没有任何知识的情况下直接进入自己的项目。我正在试验一个来自其他人github的unity项目,我一直很喜欢在游戏运行时操纵游戏设置,但我只是通过在unity项目编辑器(如果它叫inspect边栏)中播放场景来做到这一点。我希望在我建造和运行之后也能这样做,以获得更好的视野。有没有一种方法可以继续使用设置板,或者有没有一种方法可以将它们转换成游戏中的变量,我可以通过某种方式进行更改

下面是我从中获取代码的github:

请注意,一般来说,并不是每个人都有克隆git项目的雄心壮志,只是为了弄清楚您到底想要什么以及如何实现;)

还要注意,称这些为“项目设置”是极其误导的在Unity中是完全不同的事情,通常在构建应用程序之前只在编辑器中更改

您最可能引用的设置只有三个实例
A
B
C
,它们都是

公共类SlimeSettings:ScriptableObject
{
[标题(“模拟设置”)]
[Min(1)]公共int-stepsPerFrame=1;
公共整数宽度=1280;
公共内部高度=720;
公共整数=100;
public Simulation.spawn模式spawn模式;
[标题(“轨迹设置”)]
公共浮式拖车重量=1;
公共浮点数十年=1;
公共浮动扩散器=1;
公共物种设置[]物种设置;
[系统可序列化]
公共结构规范设置
{
[标题(“移动设置”)]
公共交通速度;
公共浮动转速;
[标题(“传感器设置”)]
公共浮标间距;
公共浮动汇率;
[Min(1)]公共尺寸;
}
}
然后在组件
模拟中引用

公共类模拟:单一行为
{
...
公共瘦身设置;
...
}
现在有点不清楚你到底想要实现什么,但我可以想象两件可能的事情

  • 您希望在运行时交换引用的设置资源

    例如,您可以使用一个额外的控制器组件,如

    [RequireComponent(typeof(simulation))]
    公共类设置:单行为
    {
    [SerializeField]私有模拟\u模拟;
    [序列化字段]私有列表所有设置;
    私有内部电流;
    私有void更新()
    {
    //例如,每次按空格键时,只需转到下一个设置
    if(Input.GetKeyDown(KeyCode.Space))
    {
    如果(!\u simulation)\u simulation=GetComponent();
    _当前=(\u当前+1)%AllSettings.Length;
    _simulation.settings=AllSettings[_current];
    }
    }
    }
    
  • 或者您想要的实际上是更改当前资产的值(请注意,在编辑器中,ScriptableObjects中的此类更改将是持久的!)

    您可以像以前一样在单独的脚本中执行此操作,例如

    //以某种方式获取对组件的引用,例如。
    var模拟=GetComponent();
    //获取当前引用的设置资源引用
    var设置=simulation.settings;
    //不要做任何你想做的改变
    settings.spawnMode=Simulation.spawnMode.RandomCircle;
    

请注意,显然,这些设置中的大多数只在开始时影响一次,之后是否更改也无关紧要,因此每次更改时都需要以某种方式重新初始化模拟,如果这正是您试图实现的设置。

您到底在谈论哪些设置?在构建…@derHugo之后,它们中的大多数都没有意义进行更改。在项目的settings文件夹中,有一个c#monoscript,其中包含诸如对象速度等变量以及类似的内容。