Обращение к классу С# (РЕШЕНО)

Общие вопросы о Unity3D

Обращение к классу С# (РЕШЕНО)

Сообщение Sality 30 авг 2013, 20:55

Всем привет, я извиняюсь может для кого-то мой вопрос покажется простым, но я пришел в мир .Net из С++, и когда я вижу такое (покажу ниже) в моем мозгу происходит коллизия.
Вобщем в С++ чтоб обратится к классу, нужно создать его экземпляр (выделить память, получить на нее ссылку) через NEW. либо он статический - другая история. В Сишарпе вроде как тоже самое я думал до сегодня, но после вот этого примера у меня ступор просто.

Два простых класса :
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class ReceiverItem
{
        public GameObject receiver;
        public string action = "OnSignal";
        public float delay;
       
        public IEnumerator SendWithDelay (MonoBehaviour sender)
        {
                yield return new WaitForSeconds (delay);
                if (receiver)
                        receiver.SendMessage (action);
                else
                        Debug.LogWarning ("No receiver of signal \""+action+"\" on object "+sender.name+" ("+sender.GetType().Name+")", sender);
        }
}

public class SignalSender
{
        public bool onlyOnce = false;
        public ReceiverItem[] receivers;
       
        private bool hasFired = false;
       
        public void SendSignals (MonoBehaviour sender)
        {
                if (hasFired == false || onlyOnce == false) {
                        for (var i = 0; i < receivers.Length; i++) {
                                sender.StartCoroutine (receivers[i].SendWithDelay(sender));
                        }
                        hasFired = true;
                }
        }
}


а вот обычный монобеховский скрипт на обьекте, и из него я получаю доступ к методам этих классов без всяких инициализаций классов оО
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerMoveController : MonoBehaviour
{
        public SignalSender mouseDownSignals;
        void Awake ()
        {              
                mouseDownSignals.SendSignals(this);
        }
}
 


Как блин это происходит вообще? куда я обращяюсь? классы не существуют а я к ним обращяюсь.
Последний раз редактировалось Sality 30 авг 2013, 21:02, всего редактировалось 1 раз.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Обращение к классу С#

Сообщение seaman 30 авг 2013, 21:00

Их за Вас создает Юнити когда Вы скрипт навешиваете на объект. более того , если Вы знаете плюсы, значит знаете что такое "конструктор". В Юнити конструктор для классов, унаследованных от MonoBehaviour заменяет функции Start и Awake. Т.е. Вы навешиваете скрипт на объект. При запуске игры Юнити создает внутри себя экземпляр этого класса и в конструкторе (который внутри нее) вызывает Вашу функцию Start/Awake.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Обращение к классу С#

Сообщение Sality 30 авг 2013, 21:01

Вопрос закрылся сам собой. Это работает только в UnityScrypt Это там все сверх на голову.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Обращение к классу С#

Сообщение Sality 30 авг 2013, 21:16

seaman писал(а):Их за Вас создает Юнити когда Вы скрипт навешиваете на объект. более того , если Вы знаете плюсы, значит знаете что такое "конструктор". В Юнити конструктор для классов, унаследованных от MonoBehaviour заменяет функции Start и Awake. Т.е. Вы навешиваете скрипт на объект. При запуске игры Юнити создает внутри себя экземпляр этого класса и в конструкторе (который внутри нее) вызывает Вашу функцию Start/Awake.


Не то понятно, ситуация тут другая, я обращяюсь к левому классу не обявляя его. То что класы навешаны на обьектах то понятно что они проинициализированы. Я тупанул, в С# так не канает, а вот в ЮнитиСкрипт без проблем.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15