★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
Cubism SDK for Unityで、ポーズのフェードをオフにするには
いつもお世話になっています。
何も表示していない状態から、「腕Bなどの専用パーツを持つモーションを表示」しようとすると
「基本ポーズのパーツが一瞬表示されて、腕Bがフェードインしてくる」という状態になってしまいます。
ポーズ関連のフェードを強制的にオフにした状態で、モーションを開始したいのですが、そういうことは可能でしょうか。
live2d.frameworkのL2DPose.csのコードの中身を見たのですが
public void updateParam(ALive2DModel model) 内で
// 設定から時間を変更すると、経過時間がマイナスになることがあるので、経過時間0として対応。
if (deltaTimeSec < 0) deltaTimeSec = 0;
for (int i = 0; i < partsGroupList.Count; i++)
{
normalizePartsOpacityGroup(model, partsGroupList[i], deltaTimeSec);
copyOpacityOtherParts(model, partsGroupList[i]);
}
で、となっているので、このdeltaTimeSecを大きな値にする(フェード時間を強制的に終わらせる)ようなメソッドを追加すれば一応できはするのですが、
正式な手段があれば教えていただけると助かります。
何も表示していない状態から、「腕Bなどの専用パーツを持つモーションを表示」しようとすると
「基本ポーズのパーツが一瞬表示されて、腕Bがフェードインしてくる」という状態になってしまいます。
ポーズ関連のフェードを強制的にオフにした状態で、モーションを開始したいのですが、そういうことは可能でしょうか。
live2d.frameworkのL2DPose.csのコードの中身を見たのですが
public void updateParam(ALive2DModel model) 内で
// 設定から時間を変更すると、経過時間がマイナスになることがあるので、経過時間0として対応。
if (deltaTimeSec < 0) deltaTimeSec = 0;
for (int i = 0; i < partsGroupList.Count; i++)
{
normalizePartsOpacityGroup(model, partsGroupList[i], deltaTimeSec);
copyOpacityOtherParts(model, partsGroupList[i]);
}
で、となっているので、このdeltaTimeSecを大きな値にする(フェード時間を強制的に終わらせる)ようなメソッドを追加すれば一応できはするのですが、
正式な手段があれば教えていただけると助かります。
0
コメント
deltaTimeSecを大きな値にしても、
最初の1フレームは、基本パーツが表示されてしまうようです。
コードを追ってみたところ、
public void normalizePartsOpacityGroup の
visiblePartsは、2フレーム以降は1になっているのですが、最初の1フレームだけ0になってしまう状態です。
やりたいことは「指定したモーションで表示を開始する」ということです。
Live2Dは補間をあちこちでしているため、全体を把握できていないのですが、
普通にやろうとすると、基本モーションや基本ポーズとの間で、補間やフェードが入ってしまっているため、それを無効化しようとしています。
そういったことは設計的に無理があるのでしょうか。
以下のsetPartsOpacityとsetParamFloat部分を修正すると、一瞬表示される事がなくなるかと思います。
L2DPose.csの89行目あたり 1)デフォルトの場合
2)setPartsOpacity = 0.0f, setParamFloat = 0.0fの場合、逆に一瞬だけ腕が消えます
3)setPartsOpacity = 0.5f, setParamFloat = 0.0fの場合がベストかと
参考にさせていただいて、調整をかけてみます。