Я для возвращения данных после SendMessage использую старые добрые Static переменные.
То есть у меня, есть:
1) статические переменные: Сколько урона, Кто ударил, и другие данные
Код
static var MinusHealth : float; // (у меня тут на ЯваСкрипте, но думаю всё понятно и так)
static var CurrentTransform : Transform; // трансформ объекта , который атаковал, ну и можно кучу другого взять
это была инициализация, например в скрипте Global, а потом мы обращаемся к ним
Код
Global.MinusHealth = 10;
Global.CurrentTransform = transform;
2) дальше по коду SendMessage объявляет урон какому-то там объекту, и если нужно будет вернуть какие-то данные,
то тоже отправляем через статические переменные, главное правило - не проверять два параллельных выстрела,
а проверять последовательно, то есть за одну ходку всё проверить, иначе такая моя простая система не будет работать,
и нужно мозгами пораскидывать, например вообще отказаться от SendMessage и заменить на GetComponent
Добавлено (02 Августа 2018, 03:25)
---------------------------------------------
мой код выглядит примерно так на ЮнитиСкрипт, лень переделывать в Сишарп, ибо я пока очень слабо его знаю:
Код
function OnTriggerStay2D(other : Collider2D) {
Global.LastStrike = new SendStrike();
Global.LastStrike.isPlayer = isPlayer;
Global.LastStrike.lowStrike = lowStrike;
Global.LastStrike.pos = StartPos;
Global.LastStrike.Kingdom = Kingdom;
Global.LastStrike.script = this;
other.SendMessage("CrushHP",null,SendMessageOptions.DontRequireReceiver);
}
а это инициализация в Global скрипте:
Код
// Last Strike Datas
static var LastStrike : SendStrike;
class SendStrike {
var isPlayer : boolean;
var Kingdom : String;
var pow : float; // power of strike
var pos : Vector3; // position (for direction backward)
var MirroredStrike : float; // mirrored strike when opponent block then him enemies get hurt...
var lowStrike : boolean; // Strike by Earth
var type : String; // weapon type B(lunt)/P(ierce)/S(lash)
var element : String; // weapon element F(ire)/W(ater)/E(arth)/A(ir)/L(ight)/D(arkness)
var script : WeaponNew;
}
и естественно легко назад данные возвратить через Static, может быть даже создать отдельные статические переменные