Page 1 of 1

Events/InvokeMethodで呼び出せる関数の引数の制限について

Posted: 2020/09/20 07:38
by ooee
いつもArborにはお世話になっています。
件名の内容で質問があるのですが、Events/InvokeMethodで呼び出せる関数の引数に何か制限はありますでしょうか?
といいますのも、InvokeMethodで関数を指定するのに引数の型の差異で選べるものと選べないものがあって
ドキュメントを見ても、その条件がのっていなかったもので。
手元で確認した限りでは、MonoBehaviourを継承していないクラスが引数にあると選べない感じでした。

お手数をおかけしますが、回答していただけると助かります。

Re: Events/InvokeMethodで呼び出せる関数の引数の制限について

Posted: 2020/09/20 09:59
by caitsithware
ドキュメントへの記載がなく申し訳ありません。

InvokeMethodで呼び出せるメソッドは、以下の条件で決まっています。
  1. 非publicは除外。
  2. 特殊名のメソッド(プロパティのget/setなど、内部的にメソッド扱いにされているもの)は除外。
  3. ジェネリックメソッドは除外。
  4. Arbor.Events.ShowEventAttributeがついていると強制許可。
  5. System.ObsoleteAttributeがついていると除外。
  6. Arbor.Events.HideEventAttributeがついていると除外。
  7. 引数がout以外かつ以下の型以外の場合は除外。
    • int
    • long
    • float
    • bool
    • string
    • Vector2
    • Vector3
    • Quaternion
    • Rect
    • Bounds
    • Color
    • GameObject
    • Componentから継承されたクラス
    • Objectから継承されたクラス(シーン外のアセット扱い)
    • enum型
  8. 上記判定で除外されなかったら許可。
開発当初の想定では、FlexibleFieldに対応していない引数のメソッドまで列挙してしまうと数が膨大になってしまうため、列挙する際の処理負荷などの関係から使用したいメソッドはArbor.Events.ShowEventAttributeを意図的に付けていただこうと考えていました。
(追記:例えばStartCoroutine(IEnumerator)などの、基本的にArbor上から呼び出さないであろうメソッドも大量に追加されるので設定しやすさの面でも引数で除外しておいた方が良いかという考えもありました)
その名残が残ったままになっていますので、引数に関する制限は再検討いたします。

ひとまず現状では、メソッド側にArbor.Events.ShowEventAttributeを追加していただくようお願いいたします。

Re: Events/InvokeMethodで呼び出せる関数の引数の制限について

Posted: 2020/09/20 10:46
by ooee
早速、回答いただきありがとうございます。

[ShowEvent]属性を追加したところ、一覧表示され実行もできるのを確認できました。
ありがとうございました。

Re: Events/InvokeMethodで呼び出せる関数の引数の制限について

Posted: 2020/09/22 06:58
by caitsithware
Arbor 3.7.3にてメソッドの引数チェック部分を廃止いたしましたのでご確認ください。
Arbor 3.7.3 リリース | Arbor 3