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

アニメーションオブジェクトの部分的な色替えについてご質問させてください。

髪色などをUnity内で動的に変更したいと考えております。

具体的には各パーツのパーツカラーアトリビュートをUnity(C#)側から操作したいのですが、リファレンスを見る限り、アニメーションオブジェクトに対して一律でカラー設定が行われるようです。

■確認したリファレンス

Library_SpriteStudio6.Control.AdditionalColor AdditionalColorCreate()

次にマテリアルを取得し、「material.color = Color.red」を試してみましたが、色は変わりませんでした。

各色ごとにセルマップ作成(色違いのアセットを用意する)し、それを動的に切り替えるのではなく、

ひとつのセルマップに対して、パーツカラー機能等で動的に色変更を行いたいと考えております。

方法等ございましたら、ご教示頂けますと幸いです。

恐れ入りますが宜しくお願い致します。

■環境

Unity 2020.3.4f1

SS6Player for Unity 1.1.32

Windows10

このページをシェアする

回答 2

+1 支持
(5.9k ポイント)
OPTPiX ユーザーサポート 瀬良です。

セルマップやパーツを指定して色変更をする方法は準備しておりません。
申し訳ございません。
こちら、対応いただく場合は、スクリプトを直接変更していただくなど、独自実装いただくことになります。

髪の毛など、色違いキャラをセルマップを増やさず準備したい場合は、アニメーションデータを複製いただいて、髪の部分のパーツカラーを変えていただくなど。
データでの対応をご検討ください。

お手数をお掛けしますが、よろしくお願いいたします。
(170 ポイント)
ご教示いただきありがとうございます。

こちら、今後のアップデートで、セルマップやパーツを指定して色変更する方法が実装される予定等はございますでしょうか?

下記は今後の要望にはなりますが、

SpriteStudioのパーツカラー機能は、その他のアプリケーションには無い大変便利な機能ですので、C#側で色替えを行う機能が、将来的に実装されると1ユーザーとして大変嬉しく思います。

ご検討の程、何卒宜しくお願いします。
(5.0k ポイント)
お世話になっております。SS6Player for Unity開発担当です。

ご要望ありがとうございます。
今後のアップデートの参考にさせていただくとともに、できるだけ早く実装を行えるよう検討と調整したいと思います。

ただ、恐らく実装の対象となるのが、現在最新版のVer.2.0以降になる可能性が高く……。

お使いのVer.1.1.32とは非互換性を伴いますため、Ver.1.1.32に実装するには(Ver.2.0への実装を参考にしていただき)自力でパッチをあてていただく必要があるかもしれません。

※おそらく機能的には、そんなに複雑性を伴うものではないはずなので、Ver.1.1.32に逆移植するのも、そんなに難しい手数はかからないとは思うのですが……。

何卒今後ともよろしくお願いいたします。
+1 支持
(5.0k ポイント)
編集

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

サポート担当(瀬良)から、プレーヤーのスクリプト改造のヒントについて要請がありましたので、別返信にてフォローさせていただきます。

まず、パーツをセルマップ毎などで変更しようとすると、改造などもかなり大掛かりになるかと思いますので、最低限の改造で済みそうな提案となります。

「パーツ毎でパーツカラーを(スクリプトから)設定する」ような改造方法になります。

※これを必要なパーツに対して行うことで、目的は達成できるのではないかと思います。


SS6Player for Unity(Ver.1.1.32)の、パーツ毎のワークエリアがあります。

Script_SpriteStudio6_Root.TableControlParts[n]

※nはパーツのインデックス(パーツID)です。

このワークの中に、

internal BufferParameterSprite ParameterSprite;

という描画パーツのみで内容が有効な描画情報のワークエリアがあります。

この構造体の中に、

internal BufferAttribute<Library_SpriteStudio6.Data.Animation.Attribute.PartsColor> PartsColor;

という、「アニメーションデータからデコードした、パーツカラーの値をキャッシュしておく」メンバ変数(フィールド)があります。

ここ(ParameterSprite.PartsColor)の内容を変更することで、実際に描画されるアニメーションにパーツカラーを影響させることができるかと思います。


このキャッシュの値は、

  • SpriteStudio6で作成されているアニメーション側で指定されていない場合、「効果なし」に指定されています。ただし、アニメーション側で指定してしまっていると、ワークに自力で設定した値は上書きされてしまいます。
  • アニメーション変更時には(BufferParameterSprite.AnimationChange関数で)クリア(効果なしに設定)されてしまいます。
  • 動的パーツカラー(アニメーション全体に影響する方)を使用していると、そちら(動的パーツカラー)が優先されてしまいます。

という点に注意していただければ、恐らくこのワークを任意の色・合成方法に変更することで、各パーツ個別に任意で指定するようにすることができるかと思います。


具体的に改造して・動作検証したわけではありませんので、少々決め手にかけるヒントとなってしまい、大変申し訳ございませんが、もしご要望の動作への一助となれば幸いです。

(170 ポイント)
ご教示頂きありがとうございます。

「アニメーションの変更時にクリアされる」という現象は手元で確認できませんでしたが、色替えは出来ました。

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