Unity - 从阵列中获取随机天空盒

Posted

技术标签:

【中文标题】Unity - 从阵列中获取随机天空盒【英文标题】:Unity - Get random Skybox out of array 【发布时间】:2016-03-06 18:24:51 【问题描述】:

对于学校任务,我必须制作一个基本的视频游戏。 我正在尝试制作太空游戏的基本版本。

我想要一个包含多个天空盒的数组,并且在启动游戏时,我希望游戏从数组中随机选择一个天空盒。这样你就会有一种感觉,你每次都在不同的重生点。

谁能帮助我?我一直在谷歌上寻找,但我找不到任何有用的东西。

天空盒位于一个名为:

的文件夹中 'Assets/SkyBox Volume 2/DeepSpaceBlue' 文件名 = DSB 'Assets/SkyBox Volume 2/DeepSpaceGreen' 文件名 = DSG ...

这是我当前的代码,其中包含错误。

编辑

using UnityEngine;
using System.Collections;
public class RandomSkybox : MonoBehaviour

    public Material[] materials;

    // Use this for initialization
    void Start()
    
        skyBoxMaterial = materials[Random.Range(0, materials.length)];
        RenderSettings.skybox = skyBoxMaterial;
    

    // Update is called once per frame
    void Update()
    

    

错误:

Severity    Code    Description Project File    Line    Suppression State
Error   CS0103  The name 'skyBoxMaterial' does not exist in the current context SpaceRaiders.CSharp D:\Documenten\Unity\SpaceRaiders\Assets\Scripts\Space\RandomSkybox.cs   10  Active
Error   CS1061  'Material[]' does not contain a definition for 'length' and no extension method 'length' accepting a first argument of type 'Material[]' could be found (are you missing a using directive or an assembly reference?)   SpaceRaiders.CSharp D:\Documenten\Unity\SpaceRaiders\Assets\Scripts\Space\RandomSkybox.cs   10  Active
Error   CS0103  The name 'skyBoxMaterial' does not exist in the current context SpaceRaiders.CSharp D:\Documenten\Unity\SpaceRaiders\Assets\Scripts\Space\RandomSkybox.cs   11  Active

【问题讨论】:

看这个:answers.unity3d.com/questions/541258/… @FᴀʀʜᴀɴAɴᴀᴍ .. OP的问题是他忘了拖进去 @JoeBlow 是的.. 如果他用代码填充它,链接会很有帮助.. 【参考方案1】:
public Skybox[] skyBoxes;

你必须

将项目拖到数组中

就这么简单。在 Inspector 中,将长度设置为“5”,然后将您的五个项目拖入其中。仅此而已。


也在你发布的最新版本中,

skyBoxMaterial = materials[Random.Range(0, materials.length)];

您忘记声明变量。就这么简单。

Material skyBoxMaterial;
skyBoxMaterial = materials[Random.Range(0, materials.length)];

“长度”显然是“长度”。不要忘记 List 是 .Count 而不是 .Length

【讨论】:

由于代码错误,无法正常工作,我正在编辑我的帖子 我现在仍然收到此错误,感谢您的帮助!严重性代码描述项目文件行抑制状态错误CS1061“材料[]”不包含“长度”的定义,并且找不到接受“材料[]”类型的第一个参数的扩展方法“长度”(您是否缺少使用指令还是程序集引用?) SpaceRaiders.CSharp D:\Documenten\Unity\SpaceRaiders\Assets\Scripts\Space\RandomSkybox.cs 11 Active

以上是关于Unity - 从阵列中获取随机天空盒的主要内容,如果未能解决你的问题,请参考以下文章

unity 中怎样设置动态天空盒,让天空盒上的云动起来

Unity5.6.2删除或更换天空盒

Unity 自定义天空盒,如 Unity 天空盒

怎么使用深空盒子材质

Unity 实战项目 ☀️| Unity实现 天空盒 轮播系列切换

Unity中控制天空盒移动的解决办法