Unity - 从阵列中随机获取Skybox

时间:2016-03-06 18:24:51

标签: c# arrays unity3d skybox

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

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

任何人都可以帮助我吗?我一直在寻找谷歌,但我找不到任何有用的东西。

天空盒位于名为:

的文件夹中
  • '资产/ SkyBox第2卷/ DeepSpaceBlue'文件名= DSB
  • '资产/ SkyBox第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

1 个答案:

答案 0 :(得分:3)

public Skybox[] skyBoxes;

你必须

将项目拖动到数组

就这么简单。在检查器中,将长度设置为“5”,然后拖动您的五个项目。还有更多内容。

同样在最新版本中,您已发布,

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

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

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

表示“长度”显然是“长度”。不要忘记List<>它是.Count而非.Length