2016-01-03 2 views
1

Все, что я пишу все это с Unity APIОшибка Unity ToBuiltIn()? Легкий ответ?

Так у меня есть этот код, чтобы помочь мне сформировать рельеф местности:

Array CreateTerrainVertices(float[] _heightmap, float _resolution) 
{ 
    Debug.Log("Creating terrain vertices"); 
    // The minimum resolution is 1 
    resolution = Mathf.Max(1, resolution); 

    Array vertices = new Array(); 

    // For each point, in the heightmap, create a vertex for 
    // the top and the bottom of the terrain. 
    for (int i = 0; i < _heightmap.Length; i++) { 

     vertices.Push(new Vector2(i/resolution, _heightmap[i])); 
     vertices.Push(new Vector2(i/resolution, 0)); 
    } 

    Debug.Log("Created " + vertices.length + " terrain vertices"); 
    return vertices.ToBuiltin(Vector2) as Vector2[]; 
} 

Все работает за совершенный в этом сценарии! за исключением того, что каждая последняя строка!

return vertices.ToBuiltin(Vector2) as Vector2[]; 

Получаем ошибку «Vector2 - это тип, который недопустим в этом контексте». Но когда я удалить Vector2 делая его похожим на:

return vertices.ToBuiltin() as Vector2[]; 

он говорит мне, что нужно типа в параметрах ... Но, глядя на первой ошибки я получил это говорит «Vector2 тип ... ».

Как это исправить? Что там?

+0

Является ли этот код JavaScript или C#? –

ответ

0

Вы создаете объект Array с гибким размером, добавляя фиксированное количество элементов и пытающийся преобразовать его в массив фиксированного размера.

Правильный способ использования UnityEngine.Lang.Array.ToBuiltIn (Тип) заключается в передаче объекта типа, указывающего тип, к которому должны быть преобразованы объекты.

return vertices.ToBuiltIn(typeof(Vector2)); // I am removing the "as Vector2[]" as it has no effect 

Это, однако, является неэффективным решением в целом, потому что массив должен будет быть изменены несколько раз в течение его состава, а затем, преобразовано. Почему бы сразу не создать массив с правильным типом и размером?

Array CreateTerrainVertices(float[] _heightmap, float _resolution) 
{ 
    Debug.Log("Creating terrain vertices"); 
    // The minimum resolution is 1 
    resolution = Mathf.Max(1, resolution); 

    Vector2[] vertices = new Vector2[_heightmap.Length * 2]; 

    // For each point, in the heightmap, create a vertex for 
    // the top and the bottom of the terrain. 
    for (int i = 0; i < _heightmap.Length; i++) 
    { 
     vertices[i * 2] = new Vector2(i/resolution, _heightmap[i]); 
     vertices[i * 2 + 1] = new Vector2(i/resolution, 0); 
    } 

    Debug.Log("Created " + vertices.length + " terrain vertices"); 
    return vertices; 
} 
Смежные вопросы