В этом сценарии много неправильных вещей, и он даже не может быть скомпилирован.
Давайте начнем с метода Awake.
private void Awake()
{
public LineRenderer lr = new LineRenderer();
GameObject myLine;
}
Здесь вы пытаетесь установитьмодификатор доступа к переменной lr
внутри локальной области действия Awake
, это невозможно.Вы также пытаетесь добавить lineRenderer, используя new LineRenderer
.Это не то, как вы добавляете Компоненты в Unity.
GameObject myLine
и LineRenderer lr
, которые вы создаете здесь, могут использоваться только внутри области действия Awake
.То, что он создан в конце области, означает, что он никогда не используется.Вы не сможете получить доступ к этим переменным из вашего ShapeColor
метода.
Вместо этого вы должны избавиться от всей функции Awake
, поскольку она сейчас ничего не делает, и заменить ее, объявив переменные в областях уровня класса следующим образом:
public class CreateLine : MonoBehaviour
{
GameObject myLine; //This is now not limited to the Awake scope, but useable through the entire script
LineRenderer lr;
public void Start()
{
ShapeCreator();
}
//Rest of code...
Тогда внутри вашего ShapeCreator
метода у нас есть следующее:
public void ShapeCreator()
{
lr = myLine.AddComponent<LineRenderer>();
//Rest of code....
}
Вы пытаетесь добавить компонент LineRenderer к myLine
, однако, как было установлено ранее, его не существует только из-за myLine
существующий в локальном объеме Awake
.После того, как вы определили myLine
, как сказано выше, myLine.AddComponent<LineRenderer>();
действительно будет работать, и добавит LineRenderer в GameObject.То же самое касается LineRenderer lr
Destroy(lines , 5);
Должно работать отлично для уничтожения игрового объекта, который, в свою очередь, уничтожит компонент linerenderer, который должен избавиться от самих линий
IЯ также посоветовал бы вам прочитать некоторую информацию о «областях» и о том, как они работают, а также о том, как смотреть на консоль на наличие ошибок, так как ошибки там помогают вам отладить подобные проблемы.
Причина, по которой выпродолжайте видеть строки, потому что вы создаете строки в цикле обновления, причем таймер, вероятно, короче 5 секунд, но уничтожает их только через 5 секунд.Это означает, что новые строки будут непрерывно создаваться до , когда вы удаляете старые строки.
, если вы перемещаете его из обновления и в метод, вызываемый только один раз (запуск, пробуждение и т. Д.), Выувидит, что он создает только одну строку и удаляет эту строку через 5 секунд, или увеличит значение timer
до 5 секунд.