0 支持
1.4k 閲覧
(240 ポイント) Q&A

SS6P for Unityの機能について質問させてください。

スクリプト上で作成したアニメーションの長さ(全体の長さ)を取得する方法は

ありますか?

現在、UnityでSpriteStudioを使用するか検討しています。

過去の質問(Unityスクリプト上でアニメーションの途中を会得したい)では

「途中経過時間の取得」については既に触れられていたのですが

「アニメーション全体の長さの取得」について触れられていなかったので質問させていただきました。

教えていただけると非常に助かります。

このページをシェアする

回答 1

0 支持
(5.0k ポイント)

うみつき様

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

現状、アニメーションの全体フレーム数か時間を取得する方法は、関数としては設置されていません。申し訳ありません。

※こちら(機能関数としての実装)は、次以降のバージョンアップ時の参考とさせていただきます。ありがとうございます。(現状直近で予定されているバージョンアップが「Ver.2.1. Beta」となっています)

現状でアニメーションの時間を取得する方法としては……

// これは取得対象とするSS6PUのアニメーションオブジェクトとします

Script_SpriteStudio6_Root scriptRoot;

//これは取得対象とするアニメーションを再生しているトラック番号です。通常は0だとは思います。

int indexTrack = 0;

// 現在再生中のアニメーションのインデックスを取得

int indexAnimation = scriptRoot.TableControlTrack[i].ArgumentContainer.IndexAnimation;

// 現在設定されているアニメーションデータから長さとFPSのデータを取得

int countFrame = scriptRoot.DataAnimation.TableAnimation[indexAnimation].CountFrame;

int framePerSecond = scriptRoot.DataAnimation.TableAnimation[indexAnimation].FramePerSecond;

// 再生区間長を求める

float timeAnimation = (float)countFrame / (float)framePerSecond;

※この掲示板(?)がコードを書くようにはできていないので、見づらい旨、申し訳ありません。テキストエディタなどに上記の区画をコピー&ペーストして見てやっていただけると、非常に助かります。

……少々ダイレクトな処理となってしまいますが……これで求まるのではないかと思われます。

scriptRootとindexTrack・indexAnimationを使用しないで、(再生中ではないアニメーションを)直接DataAnimationから求める方法もありますが……そちらについては、上の方法から自明だと思いますので、ここでは省略させていただきます(単にindexAnimationを即値で与えるだけだと思いますので……)。

このindexAnimationは、

scriptRootのIndexGetAnimation関数で得られるアニメーションのインデックスそのものですので、特定名からアニメーションのインデックスを取得することも可能です。

一点注意点としては、上記でのscriptRoot.DataAnimation(Script_SpriteStudio6_DataAnimationクラス)はScriptableObjectですので(つまり動作上でのマスタデータです)、書き換えたりしてしまうと、現在動作しているプロジェクトのアニメーション全体に影響が及んだり・最悪様々な誤動作を引き起こすので、基本的には内容を変更したりしないでください。


以上で望まれた内容になっているのであれば、非常に幸いです。

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

(240 ポイント)
ご回答ありがとうございます。

上記のような形でも時間を取得できる方法があるのであれば対応できるので大丈夫です!

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

またよろしくお願いいたします。
...