Это ссылка на мой предыдущий вопрос о невозможности получить ссылку на Unity LineRenderer. Временно обошелся, хотя до сих пор не понимаю, в чем проблема. Но теперь, получив ссылку на LineRenderer, я ничего не могу с ней сделать.
LineRenderer добавляется программно, и ссылка, полученная в Awake (), затем, позже, по запросу, необходимо получить к ней доступ, добавить нагрузку точки и отобразите его. Но я не могу - не буду компилировать. Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public class Test : MonoBehaviour
{
LineRenderer
lineOfFlight;
void Awake()
{
GameObject
lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<LineRenderer>();
}
void Start() { }
void Update()
{
List<Vector3>
savedBuffer = new List<Vector3>(); // added for test
Vector3[]
positions = new Vector3[3000];
int index = 0;
foreach (Vector3 m in savedBuffer)
positions[index++] = new Vector3(index, index, index);
lineOfFlight.SetPositions(positions);
}
}
Он устанавливает OK в Awake ().
Ошибка в том, что lineOfFlight (тип LineRenderer) не имеет метода SetPositions () - согласно руководству Unity это есть, я не могу найти никакого метода, который вообще мог бы использовать для установки позиций. Все, что у него есть, это стандартные методы GameObject.
Это пример руководства Unity (в Update ()):
LineRenderer lineRenderer = GetComponent<LineRenderer>();
var points = new Vector3[lengthOfLineRenderer];
var t = Time.time;
for (int i = 0; i < lengthOfLineRenderer; i++)
{
points[i] = new Vector3(i * 0.5f, Mathf.Sin(i + t), 0.0f);
}
lineRenderer.SetPositions(points);
Так что же отличается?
Я упускают из виду главное - как получить доступ к этим компонентам? Я обнаруживал эту проблему раньше на других компонентах - очевидно, я не понимаю, как получить доступ к API в Unity.
Класс является производным от MonoBehaviour, и UnityEngine включен.
STOP PRESS:
Создан тестовый файл Test.cs - в нем есть только ключевые биты - теперь показан выше (заменен исходным примером). Не собирается делать много (ничего в saveBuffer), но должен компилироваться? Выдает точно такую же ошибку в строке lineOfFlight.SetPositions(positions);
.
Я также пробовал GetComponent<LineRenderer>().SetPositions(positions);
- точно так же: «'LineRenderer' не содержит определения для 'SetPositions' и нет доступного метода расширения ' SetPositions ', принимающий первый аргумент типа' LineRenderer ', может быть обнаружен (вам не хватает директивы using или ссылки на сборку?) [Assembly-CSharp] csharp (CS1061) ".