StateBehaviourへの初期化用Callbackメソッド

This is a forum for requesting Arbor developers.
The items required for the request are as follows.
  • What are you trying to do with Arbor?
  • Specifically, where are you inconvenient and in trouble?
  • What should I do to improve?
Attention point:
  • We can not answer requests that do not know the detailed situation.
  • We can not answer your request for specific problems in the specification of your project.
  • We can not answer your request on Unity's specification issues.
  • We do not guarantee the implementation of your request.

ここは、Arbor開発者への要望を行うためのフォーラムです。
要望に必要な項目は以下の通りです。
  • Arborを使って何をしようとしているか。
  • 具体的にどこが不便で困っているか。
  • 改善するにはどうすればよいか。
注意点:
  • 詳しい状況がわからない要望については答えられません。
  • ユーザー様のプロジェクトの仕様上の固有の問題に対する要望については答えられません。
  • Unityの仕様上の問題に対する要望には答えられません。
  • 要望の実装を必ずお約束するものではございません。

Forum rules
The items required for the request are as follows.
  • What are you trying to do with Arbor?
  • Specifically, where are you inconvenient and in trouble?
  • What should I do to improve?
Attention point:
  • We can not answer requests that do not know the detailed situation.
  • We can not answer your request for specific problems in the specification of your project.
  • We can not answer your request on Unity's specification issues.
  • We do not guarantee the implementation of your request.

要望に必要な項目は以下の通りです。
  • Arborを使って何をしようとしているか。
  • 具体的にどこが不便で困っているか。
  • 改善するにはどうすればよいか。
注意点:
  • 詳しい状況がわからない要望については答えられません。
  • ユーザー様のプロジェクトの仕様上の固有の問題に対する要望については答えられません。
  • Unityの仕様上の問題に対する要望には答えられません。
  • 要望の実装を必ずお約束するものではございません。
nice

StateBehaviourへの初期化用Callbackメソッド

Post by nice »

お世話になっております。
(質問に引き続き、連投となってしまい申し訳ございません…)

StateBehaviourに、例えばGetCompornentや他Stateに対するGetBehaviourをした結果を
メンバ変数に入れるような用途に適した、初期化用Callbackメソッドを追加していただくことは可能でしょうか?

最初、通常のMonobehaviourと同様に、Startに実装すればよいかとも考えましたが、
現状、OnStateBegin→Startという順番で呼ばれておりますので、
初回のOnStateBegin呼び出し時点では、まだ初期化処理が動く前となってしまいます。

OnStateBeginにて上記のような初期化処理を実装するのも考えましたが、
Startとは違い、OnStateBeginは呼ばれますので、毎回GetCompornent/GetBehaviourをするのが
少し気になってしまっています。
また、他に何か値を持っていた場合も、それらの値が状態遷移ごとに初期化されてしまいます。

Awakeも考えましたが、このタイミングではGetCompornent/GetBehaviourに失敗する(nullが返る)こともありえると思います。

そのため、例えばですが、初回のOnStateBegin呼び出し直前などに一度だけ呼ばれる等、
何か初期化用のCalbackメソッドを用意していただけると嬉しいです。

ご検討頂けると幸いです。
また、他に良い方法がありましたら、ご教示頂けると助かります。
それでは、よろしくおねがいします。
nice

Re: StateBehaviourへの初期化用Callbackメソッド

Post by nice »

すみません。
やや雑然とした書き方になってしまったので、以下に整理させて頂きます。

お伝えしたかった要望の内容としては、
 ・Startのような初期化に用いることが出来るoverride可能なメソッドが欲しい
 ・そのメソッドはOnStateBeginより前のタイミングで呼ばれて欲しい
 ・かつ、そのメソッドは一度だけ呼ばれて欲しい
となります。

また、先のPostの「Callback」は誤用でした…。混乱させてしまいましたら申し訳ございません。

何卒、ご検討よろしくおねがいします。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: StateBehaviourへの初期化用Callbackメソッド

Post by caitsithware »

OnStateBeginの呼び出しタイミングはOnEnableの直後(enabledをtrueにした直後)なので、Start前に呼び出されてしまうのはUnityの仕様上の問題ですね。
イベント関数の実行順

初期化用Callbackメソッドについて検討いたしますが、次回更新がいつになるかはちょっとお約束できないので、その点についてはご容赦いただければと。

また、個人的に、このような呼び出し順の問題を対処するなら、という程度の話ですが、

Code: Select all

Component _CachedComponent;
Component cachedComponent
{
    get {
        if( _CachedComponent == null )
        {
            _CachedComponent = GetComponent~
        }
        return _CachedComponent;
    }
}
とかやっておいて、参照する際はすべてcachedComponent介すようにしておいたりします。
数によってはかなりの手間になってしまいますが、もしよろしければこの方法もご検討ください。
nice

Re: StateBehaviourへの初期化用Callbackメソッド

Post by nice »

お返事、ありがとうございます。

初期化用メソッドについて検討していただけるとの事で、感謝致します。
次回更新時期について現時点では未定であることも了解いたしました。
どうぞ無理せずご自愛下さい。

また、cachedComponentについてもご提案頂きありがとうございます。
初回使用時にのみGetComponentする仕組みなのですね。大変参考となります!
この方法を是非使わせていただきます。

それでは、ありがとうございました。


Last bumped by Anonymous on 2017/01/05 15:44.
Post Reply