Вобщем в С++ чтоб обратится к классу, нужно создать его экземпляр (выделить память, получить на нее ссылку) через 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;
}
}
}
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);
}
}
using System.Collections;
public class PlayerMoveController : MonoBehaviour
{
public SignalSender mouseDownSignals;
void Awake ()
{
mouseDownSignals.SendSignals(this);
}
}
Как блин это происходит вообще? куда я обращяюсь? классы не существуют а я к ним обращяюсь.