0 支持
673 閲覧
Q&A

・使用バージョン: 5.8.0.6556

・SS5PlayerForUnity を使用

Unityのスクリプト上からSpriteStudioデータを操作し、

エフェクトパーツを非表示にしたいのですが、

private Script_SpriteStudio_Root m_ssr;

int id = m_ssr.IDGetParts("effect_1");

m_ssr.HideSetForce(id, true, true);

このようなスクリプトでは、非表示になってくれないようです。

(別の通常Cellパーツでは、上記スクリプトで正しく動作しているのを確認しています。)

お手数おかけいたしますが、

正しい方法をご教授お願いいたします。

このページをシェアする

回答 1

0 支持
(5.0k ポイント)
編集
お世話になっております。

SS5PUで、アニメーションから制御されているエフェクトの動的な非表示化については、再生状態と直結することもあって推奨できない面が多いので、エフェクトパーツの非表示化では制御できないようになっています。

ただ、単純に非表示になれば良い場合は、エフェクトパーツの管理下にあるエフェクトのFlagHideForceを直接制御するという方法があります。

Library_SpriteStudio.Control.Parts InstanceControlParts cnt_parts = m_ssr.ControlGetParts(id);
if(cnt_parts != null) {
  Script_SpriteStudio_RootEffect ssre = cnt_parts.InstanceRootUnderControlEffect;
  if(ssre != null) {
    /* trueだと非表示・falseだとアニメーションに従います */
    ssre.FlagHideForce = true;
  }
}

のような方法はいかがでしょうか?

いきなりここに直接書いてしまいましたため、これ単体でコンパイルが通ったりするかなどを確認できていない点、大変申し訳ございません。

ただ、やろうとしている処理については、ご推察いただけるのではないかと思います。

※私が別の件で手がふさがっており、すぐに動作検証を行えないため、まずは方法だけでもお伝えした方がよいかと思った次第です。

この方法だと、エフェクト自体は表示されないだけで計算などは行われているため、その分のCPU負荷などは軽減できませんが、表示そのものについては制御できるかと思います。

私の方でも、時間が空き次第、動作の検証をしてみようと思います(ちょっと、数日内とかでこちらの検証ができるかが、少々不安があります点、申し訳ありません)。

※また、他の何かもっと良い方法なども見つかりましたら、こちらにてレポートさせていただければと思います。

お忙しい中お手数をおかけして大変申し訳ございませんが、今後ともなにとぞよろしくお願いいたします。
...