0 支持
52 閲覧
(170 ポイント) Q&A

SS6P for Unityの「Script_SpriteStudio6_Root」について質問させてください。

[ExecuteInEditMode]のアトリビュートが付与されておりますが、こちらはどの様な意図で付与しておりますでしょうか?

以前、こちらの件スクリプト改造についてご教示頂いた後、

SS6Pをカスタマイズすることになったのですが、

Editモード中にスクリプトが実行されると不都合が起きる状態となりました。

その為、[ExecuteInEditMode]をコメントアウトしたのですが、特に問題は見当たりませんでした。

何か意図があってアトリビュートを付与されていると思いますので、

そちらについてご教示頂けますと幸いです。

お手数おかけしますが、何卒宜しくお願い致します。

このページをシェアする

回答 1

+1 支持
(2.7k ポイント)
編集

すらいむ 様

ご質問ありがとうございます。

お世話になっております。SS6Player for Unity(SS6PU)開発担当です。

[ExecuteInEditMode]の付与につきましては、大枠下記の理由になります。


1. SS6PUのアニメーションオブジェクトを置いた時の初期表示を行うため

SS6PUのアニメーションは、MeshRendererを使用して「プログラム的に3Dモデルを作り出して」表示されているため、アニメーションオブジェクトを最初にシーンに置いた時などにスクリプトが走っていないと(描画するための3Dモデルデータが生成されないため)表示されない状態が起こります。

これを回避するための同属性を付与しています。


2. 「インスタンス」「エフェクト」のアニメーションの初期設置のため

1と同様に、親のアニメーションから自動的に(アニメーションの初期化時に)instantiateしている子アニメーション(インスタンス・エフェクト)の初期設置を行う必要があるためです。


3. 「制御用プレハブ」がアニメーションを展開するため

上記の2とほぼ同様になりますが……

「(アニメーション名)_Control」という名前でインポート時に生成される「アニメーションオブジェクトの親に空のGameObjectが付いている」プレハブがありますが、こちらが(プレハブのネストに対応していなかった頃との互換性の関係から)専用スクリプトの内部からアニメーションオブジェクトをシーン上にinstantiateしております。

そのinstantiateした直後に(動的に生成された)アニメーションオブジェクト自身が初期化処理(初期表示)を行う必要があるため、同属性が付与されています。


というのが主な理由となっております。

基本的に、様々な要因から、エディタ上での(プレイモードなどで実行していない時に)表示されない(or 表示がおかしい)……というようなことで困らないのであれば、同属性は削除なりコメントアウトなりで外してしまっても、基本的には大丈夫なんじゃないかと思います。

何卒今後ともよろしくお願いいたします。


追伸:

改修されている点でどのあたりが[ExecuteInEditMode]が付いていると不都合になったか……などをご質問いただければ、ひょっとするとそちらの不都合を解消した方が良い場合もあるかな?などと思ったりします。

もし、支障がなければ(守秘などが絡んだりしてここで聞きづらいなどという場合などもあり得るかと思います)、サポート経由ででも情報いただけますと何か助言に類することができたりするかもしれません。

(170 ポイント)

愛瀬様

[ExecuteInEditMode]の付与に関して、ご教示頂きありがとうございます。

現状はアトリビュートを付与せずとも問題は起きていないのですが、

ご案内頂いた内容で問題が起きた際は、不都合の解消を進めたいと思います。

お力添え頂きありがとうございました。

...