Page 1 of 1

FSMを含むオブジェクトをPrefab化した際の部分的なOverridesについて

Posted: 2020/05/29 18:53
by hildsoft
お世話になっています。

FSMを含むゲームオブジェクトをPrefab化した際の部分的な更新についての質問です。
1.png
1.png (217.35 KiB) Viewed 4245 times
FSMと内包されているStateBehaviourが更新対象として挙がっているとき、逐次更新するとFSMが壊れてしまいます。
(Stateだけが残り、StateBehaviourが消えます)
Allで更新するとFSMが壊れることは無いのですが、更新したくない赤い枠の部分も更新されてしまいます。

そこで下記2点の質問です。

・現状のUnityの選択更新ではコンポーネント単位で単一コンポーネントしか選択できないようなのですが、
図の青い枠の部分のコンポーネントを複数同時に更新し、赤い枠の部分はそのままにすることは可能でしょうか?

・青枠のコンポーネントを誤って単独で更新してしまった場合にPrefabとhierarchy上の両方のFSMが壊れてしまい、Undoも効きません。
この操作ミスを抑止する(単体での更新不可や、FSMの選択で内包のコンポーネントもまとめて対象とする)ような仕組みはありますでしょうか?

確認環境
Windows 10 Pro 1909
Unity 2019.3.13f1
Arbor 3.6.11

Re: FSMを含むオブジェクトをPrefab化した際の部分的なOverridesについて

Posted: 2020/05/30 00:18
by caitsithware
いつもご利用ありがとうございます。

Arborを使用した場合のPrefabに関するご質問ですね。

まず、Arborでなぜ部分上書をすると壊れるかについてですが、Arbor上ではArborFSMというComponent(Unityオブジェクトとして扱われる)がStateBehaviourというComponentを保持している扱いとなっていますが、Unityの仕様としては全く別のComponentとして関連性はないものとして扱われています。
よって、ArborFSMとStateBehaviour両方に変更点(とくにStateBehaviourの追加や削除、データスロットの接続切断などArborFSMとStateBehaviour両方跨ぐような変更)がある状況で、1コンポーネントのみ上書きしてしまうと関連付けが正常に行われない。という感じです。
これは現状Unityの仕様によるところですので、UnityのPrefab機能をそのまま利用した場合どうしようもできません。
現在のArbor側としましてはApply Allを推奨する形になります。
hildsoft wrote: 2020/05/29 18:53 ・現状のUnityの選択更新ではコンポーネント単位で単一コンポーネントしか選択できないようなのですが、
図の青い枠の部分のコンポーネントを複数同時に更新し、赤い枠の部分はそのままにすることは可能でしょうか?
上記の通り、こちらはUnityの機能そのままですのでフォーラムルールにある通り申し訳ありませんがUnityの仕様上の問題に関することですので確かなことは答えられません。
Unityへのお問い合わせをお勧めいたします。
hildsoft wrote: 2020/05/29 18:53 ・青枠のコンポーネントを誤って単独で更新してしまった場合にPrefabとhierarchy上の両方のFSMが壊れてしまい、Undoも効きません。
この操作ミスを抑止する(単体での更新不可や、FSMの選択で内包のコンポーネントもまとめて対象とする)ような仕組みはありますでしょうか?
こちらもPrefab機能側についてはUnityの機能そのままですので、そういった仕組みがあるかについてはUnityの仕様上の問題に関することですので確かなことは答えられません。

Arbor側としましてはまずそういったことが実現可能なのかも含め検討していきたいと思います。

Re: FSMを含むオブジェクトをPrefab化した際の部分的なOverridesについて

Posted: 2020/05/30 01:31
by hildsoft
ご多忙のところ、早速の回答ありがとうございます。
caitsithware wrote: 2020/05/30 00:18 これは現状Unityの仕様によるところですので、UnityのPrefab機能をそのまま利用した場合どうしようもできません。
現在のArbor側としましてはApply Allを推奨する形になります。
なるほど。Componentを並列でしか持てないUnity側の仕様なのですね。
確かにComponentの入れ子は見たことないですね……。

操作が悪いのか仕様なのかが分からなかったので迷っていましたが、確認できて方向が定まりました。
Allで処理する分には問題ないようなので、FSMComponentを持たせるGameObjectを再考してみます。

ありがとうございました。