BornFoRdeatHа вы на 100 проц уверены что a_01 это переменная когда обращаетесь a_01.nnn++? или все таки это класс?
seaman1. Никогда не называйте переменные также как классы. И сами запутаетесь и всех остальных запутаете.
Я лишь совсем недавно приступил к изучению Unity3d. Что же касаемо Ваших вопросов, то уверяю, что это не я выдумал конструкцию: public a_01 a_01; Вот, например, выдержка из статьи «Как скрипты общаются»:
-Мне часто задают вопрос о том, как обратиться из какого-либо скрипта к переменной другого скрипта, или как вызвать метод (функцию) другого скрипта. В этой маленькой статейке я бы хотел описать способы, которые можно для этого использовать.
Публичные переменные и доступ к компонентам
Допустим есть у нас такой скрипт
Используется csharp
using UnityEngine;
// скрипт, к переменной которого мы хотим получить доступ
public class ScriptWithVariable
{
// переменная, к которой мы хотим получить доступ
public int myPublicVariable;
}
Далее мы хотим из другого скрипта на том же объекте менять эту переменную. Есть несколько способов это сделать:
Первый вариант подразумевает, что вы создадите публичную переменную.
Используется csharp
using UnityEngine;
public class VariableChanger
{
// переменная, которая отобразится в редакторе Unity
// и на которую надо перетащить скрипт ScriptWithVariable с того же или иного объекта сцены
public ScriptWithVariable scriptWithVariable;
public void Update()
{
// изменение нужной нам переменной
scriptWithVariable.myPublicVariable++;
}
}
seaman2. Каким образом у Вас присваивается переменная public a_01 a_01? Где вы ее присваиваете?
Я уже писал выше. На сцене триггер. К нему приложен скрипт
TriggerCub1. Именно в этом скрипте и описывается переменная a_01:
Используется csharp
using UnityEngine;
using System.Collections;
public class TriggerCub1 : MonoBehaviour
{
public a_01 a_01;
Где первая a_01 это тип переменной, совпадающий с названием скрипта a_01.cs, в котором я собираюсь изменять переменную nnn. Вот полное содержимое этого скрипта:
Используется csharp
using UnityEngine;
using System.Collections;
public class a_01 : MonoBehaviour {
public int nnn;
void Update () {
Debug.Log(nnn);
}
}
Эта связка двух скриптов работает безукоризненно и мной проверена не раз, но только в том случае, если объект, которому принадлежит последний скрипт присутствует явно на сцене. Если же я создаю этот объект из скрипта TriggerCub1.cs, используя префаб объекта с прикреплённым к нему скриптом a_01.cs, то компилятор уже не находит пути к переменной nnn этого скрипта. Вопрос именно в этом, а не в том, почему я дважды использую одно имя
a_01.