~~NOTOC~~ ====== ExportAnimation(アニメーション) ====== このページは過去の情報となります。\\ 新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。 **アニメーション**に関するクラスです。\\ アニメーションの設定は、[[vci/sample/animation/tutorial2 | Animationを組込んだEmptyの子に動かしたいObjectを置く]]をご覧ください。 ^ExportTransform^^^ ^ 名前 ^ 説明 ^ バージョン ^ | GetAnimation | VCI内のアニメーションを取得 | | ^ExportAnimation^^^ ^ 名前 ^ 説明 ^ バージョン ^ | [[vci/script/reference/exportanimation#GetCount]] | アニメーションの数を取得 | | | [[vci/script/reference/exportanimation#GetNames]] | アニメーションの名前を取得 | | | [[vci/script/reference/exportanimation#HasClip]] | アニメーションが存在するかどうか|1.8.2a以降| | [[vci/script/reference/exportanimation#IsPlaying]] | アニメーションが再生中かどうか|1.8.2a以降| | [[vci/script/reference/exportanimation#Play]] | 再生 | | | [[vci/script/reference/exportanimation#PlayFromIndex]] | インデックス番号で指定して再生 | | | [[vci/script/reference/exportanimation#PlayFromName]] | ファイル名で指定して再生 | | | [[vci/script/reference/exportanimation#PlayOneShot]] | アニメーションを1回だけ再生\\ Play(false)に相当します。 | | | [[vci/script/reference/exportanimation#PlayWithState]] | 状態を指定して再生|1.8.2a以降| | [[vci/script/reference/exportanimation#Blend]] | アニメーションをブレンドして再生|1.8.2a以降| | [[vci/script/reference/exportanimation#CrossFade]] | アニメーションをクロスフェードして再生|1.8.2a以降| | [[vci/script/reference/exportanimation#SetState]] | アニメーションの状態を指定|1.8.2a以降| | [[vci/script/reference/exportanimation#SetTime]] | アニメーションの再生時間を指定|2.3.9a以降| | [[vci/script/reference/exportanimation#Stop]] | 再生を停止|1.8.2a以降| | [[vci/script/reference/exportanimation#Rewind]] | 再生中のアニメーションを巻き戻し|1.8.2a以降| | [[vci/script/reference/exportanimation#GetDuration]] | アニメーションの長さ(ファイル名)|2.3.4a以降| | [[vci/script/reference/exportanimation#GetDurationFromIndex]] | アニメーションの長さ(インデックス番号)|2.3.4a以降| | [[vci/script/reference/exportanimation#GetCurrentTime]] | アニメーションの再生位置(ファイル名)|2.3.4a以降| | [[vci/script/reference/exportanimation#GetCurrentTimeFromIndex]] | アニメーションの再生位置(インデックス番号)|2.3.4a以降| ''_ALL_'' を含む関数は、他のクライアントでも実行され同期します。\\ 全てのクライアントで同じ結果になってほしい場合は ''_ALL_'' を含む関数を使用してください。 Play _ALL_Play * アニメーションが付いているオブジェクトはSubItemである必要はありません。 ==== 設定可能項目 ==== --> 設定可能項目の一覧 (クリックで展開) # **PlayWithState, SetStateの設定可能項目** ^ 名前 ^ 型 ^ 説明 ^ |speed|number|再生速度を指定します。デフォルト値は1です。0以上の値を設定してください。| |weight|number|ブレンドウェイトを指定します。デフォルト値は1です。0以上1以下の値を設定してください。| |wrap_mode |string|ラップモードを指定します。デフォルト値はonceです。once, loop, ping_pongを指定できます。| 設定例 tableをjsonに変換して渡します。 local table = { wrap_mode="loop", speed=0.2} local jsonString = json.serialize(table) anim.PlayWithState("アニメーション名", jsonString) **Blendの設定可能項目** ^ 名前 ^ 型 ^ 説明 ^ |target_weight |number|ブレンドウェイトを指定します。デフォルト値は1です。0以上の値を設定してください。| |fade_length |number|フェード時間(秒)を指定します。デフォルト値は0.3秒です。0以上の値を指定してください。| UnityのAnimation.Blendに相当する機能です。 [[https://docs.unity3d.com/jp/460/ScriptReference/Animation.Blend.html|Animation.Blend]] 設定例 tableをjsonに変換して渡します。 local table = { wrap_mode="loop", speed=1} local jsonString = json.serialize(table) anim.SetState("再生中のアニメーション", jsonString) anim.Blend("ブレンドするアニメーション", json.serialize({target_weight=2, fade_length=1})) **CrossFadeの設定可能項目** ^ 名前 ^ 型 ^ 説明 ^ |fade_length |number|フェード時間(秒)を指定します。デフォルト値は0.3秒です。0以上の値を指定してください。| UnityのAnimation.CrossFadeに相当する機能です。 [[https://docs.unity3d.com/jp/460/ScriptReference/Animation.CrossFade.html|Animation.CrossFade]] 設定例 tableをjsonに変換して渡します。 anim.CrossFade("アニメーション名", json.serialize({fade_length=1})) オプションを指定しない場合は、空文字列を渡してください。 anim.CrossFade("アニメーション名", "")) <-- === サンプル === local chan_1 = vci.assets.GetTransform("SD_unitychan_generic_1") local chan_2 = vci.assets.GetTransform("SD_unitychan_generic_2") local chan_3 = vci.assets.GetTransform("SD_unitychan_generic_3") -- ExportTransformからアニメーションを入手 local chanAnime_1 = chan_1.GetAnimation() local chanAnime_2 = chan_2.GetAnimation() local chanAnime_3 = chan_3.GetAnimation() -- 再生 chanAnime_1.Play(true) -- PlayFromIndex(0, true)と同じ chanAnime_2.PlayOneShot() -- PlayFromIndex(0, false)と同じ chanAnime_3.PlayFromName("Damaged@loop", true) -- アニメーションの数と名前を入手できます print(chanAnime_3.GetCount()) local names = chanAnime_3.GetNames() for i,m in ipairs(names) do print(string.format("%d[%s]",i,m)) end 実行結果\\ (3種類のアニメーションが再生されます) ===== GetCount ===== **GetCount: fun(): number** アニメーションの数を取得します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) print(SubitemAnime.GetCount()) end 実行結果\\ 2 ===== GetNames ===== **GetNames: fun(): usertype** アニメーションの名前を取得します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) for key, value in pairs(SubitemAnime.GetNames()) do print(key.. ' = ' ..value) end end 実行結果\\ "1 = Anim1" "2 = Anim2" ===== HasClip ===== **HasClip: fun(name: string): bool** アニメーションが存在するかどうかを示します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) print(SubitemAnime.HasClip("Anim1")) end 実行結果\\ true ===== IsPlaying ===== **IsPlaying: fun(): bool** アニメーションが再生中かどうかを示します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) print(SubitemAnime.IsPlaying()) end 実行結果\\ false ===== Play ===== **Play: fun(isloop: bool)**\\ **_ALL_Play: fun(isloop: bool)** 引数に true を入れた場合ループ再生し、false の場合1回だけ再生されます。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.Play(false) end 実行結果\\ 1回だけアニメーションが再生されます。 ===== PlayFromIndex ===== **PlayFromIndex: fun(index: number, isloop: bool)**\\ **_ALL_PlayFromIndex: fun(index: number, isloop: bool)** アニメーションをインデックス番号で指定して再生します。\\ 引数に true を入れた場合ループ再生し、false の場合1回だけ再生されます。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.PlayFromIndex(0, true) end 実行結果\\ インデックス番号0のアニメーションがループ再生されます。 ===== PlayFromName ===== **PlayFromName: fun(name: string, isloop: bool)**\\ **_ALL_PlayFromName: fun(name: string, isloop: bool)** アニメーションをファイル名で指定して再生します。\\ 引数に true を入れた場合ループ再生し、false の場合1回だけ再生されます。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.PlayFromName('Anim1', true) end 実行結果\\ ファイル名'Anim1'のアニメーションがループ再生されます。 ===== PlayOneShot ===== **PlayOneShot: fun()**\\ **_ALL_PlayOneShot: fun()** アニメーションを1回だけ再生します。\\ Play(false)に相当します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.PlayOneShot() end 実行結果\\ インデックス番号0のアニメーションを1回だけ再生します。 ===== PlayWithState ===== **PlayWithState: fun(name: string, states: string)**\\ **_ALL_PlayWithState: fun(name: string, states: string)** 状態を指定して再生します。 ^ 名前 ^ 型 ^ 説明 ^ |speed|number|再生速度を指定します。デフォルト値は1です。0未満を指定した場合逆再生になります。| |weight|number|ブレンドウェイトを指定します。デフォルト値は1です。0以上1以下の値を設定してください。| |wrap_mode |string|ラップモードを指定します。デフォルト値はonceです。once, loop, ping_pongを指定できます。| サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() local table = { wrap_mode="ping_pong", speed=0.8} local jsonString = json.serialize(table) function onUse(use) SubitemAnime.PlayWithState("Anim1", jsonString) end 実行結果\\ ファイル名"Anim1"のアニメーションがスピード0.8で再生と逆再生を繰り返します。 ===== Blend ===== **Blend: fun(name: string, options: string)**\\ **_ALL_Blend: fun(name: string, options: string)** アニメーションをブレンドして再生します。 ^ 名前 ^ 型 ^ 説明 ^ |target_weight |number|ブレンドウェイトを指定します。デフォルト値は1です。0以上の値を設定してください。| |fade_length |number|フェード時間(秒)を指定します。デフォルト値は0.3秒です。0以上の値を指定してください。| UnityのAnimation.Blendに相当する機能です。 [[https://docs.unity3d.com/jp/460/ScriptReference/Animation.Blend.html|Animation.Blend]] サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() local table = { wrap_mode="loop", speed=1} local jsonString = json.serialize(table) function onUse(use) SubitemAnime.PlayWithState("Anim1", jsonString) SubitemAnime.Blend("Anim2", json.serialize({target_weight=2, fade_length=1})) end 実行結果\\ "Anim1"と"Anim2"をブレンドして再生します。 ===== CrossFade ===== **CrossFade: fun(name: string, options: string)**\\ **_ALL_CrossFade: fun(name: string, options: string)** アニメーションをクロスフェードして再生します。 ^ 名前 ^ 型 ^ 説明 ^ |fade_length |number|フェード時間(秒)を指定します。デフォルト値は0.3秒です。0以上の値を指定してください。| UnityのAnimation.CrossFadeに相当する機能です。 [[https://docs.unity3d.com/jp/460/ScriptReference/Animation.CrossFade.html|Animation.CrossFade]] オプションを指定しない場合は、空文字列を渡してください。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() local table = { wrap_mode="loop", speed=1} local jsonString = json.serialize(table) function onUse(use) SubitemAnime.PlayWithState("Anim1", jsonString) SubitemAnime.CrossFade("Anim2", json.serialize({fade_length=1})) end 実行結果\\ "Anim1"から"Anim2"にクロスフェードして再生します。 (1.8.2a) ===== SetState ===== **SetState: fun(name: string, states: string)**\\ **_ALL_SetState: fun(name: string, states: string)** アニメーションの状態を指定します。 ^ 名前 ^ 型 ^ 説明 ^ |speed|number|再生速度を指定します。デフォルト値は1です。0以上の値を設定してください。| |weight|number|ブレンドウェイトを指定します。デフォルト値は1です。0以上1以下の値を設定してください。| |wrap_mode |string|ラップモードを指定します。デフォルト値はonceです。once, loop, ping_pongを指定できます。| サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() SubitemAnime.PlayFromName('Anim1', true) function onUse(use) local table = { speed=0.5 } local jsonState = json.serialize(table) SubitemAnime.SetState("Anim1", jsonState) end 実行結果\\ Use したとき "Anim1" アニメーション再生を速度 0.5 に設定します。 ===== SetTime ===== **SetTime: fun(name: string, time: number)**\\ アニメーションの再生時間を指定します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.Play(false) SubitemAnime.SetTime('Anim1', 5) end 実行結果\\ Use したとき "Anim1" アニメーションを5秒マークから再生します。 ===== Stop ===== **Stop: fun()**\\ **_ALL_Stop: fun()** アニメーションの再生を停止します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.Stop() end 実行結果\\ 再生されているアニメーションが停止します。 ===== Rewind ===== **Rewind: fun()**\\ **_ALL_Rewind: fun()** 再生中のアニメーションを巻き戻します。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubitemAnime = Anime.GetAnimation() function onUse(use) SubitemAnime.Rewind() end 実行結果\\ アニメーションを最初から再生し直します。 ===== GetDuration ===== 使用するには下記の環境が必要です。 * UniVCI v0.39.1 以降 * VirtualCast 2.3.4a 以降 **GetDuration: fun(name: string): number**\\ **AnimationClip名(String)** * アニメーションはAnimationClip名で指定します。 **返り値** * 指定したアニメーションの長さをnumber型で返します。 * 単位は秒です。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubItemAnime = Anime.GetAnimation() function onUse(use) local Duration = SubItemAnime.GetDuration("Anim1") print("Duration: "..tostring(Duration)); end 実行結果(Useした際の出力)\\ Duration: 5.412 ===== GetDurationFromIndex ===== 使用するには下記の環境が必要です。 * UniVCI v0.39.1 以降 * VirtualCast 2.3.4a 以降 **GetDurationFromIndex: fun(index: number): number**\\ **インデックス番号(number)** * アニメーションはAnimationIndexのnumberで指定します。\\ Indexの割り当てルールは[[vci:script:reference:exportassets:audio#audioindex | こちら]]を確認してください。 **返り値** * 指定したアニメーションの長さをnumber型で返します。 * 単位は秒です。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubItemAnime = Anime.GetAnimation() function onUse(use) local Duration = SubItemAnime.GetDurationFromIndex(0) print("Duration: "..tostring(Duration)); end 実行結果(Useした際の出力)\\ Duration: 5.412 ===== GetCurrentTime ===== 使用するには下記の環境が必要です。 * UniVCI v0.39.1 以降 * VirtualCast 2.3.4a 以降 **GetCurrentTime: fun(name: string): number**\\ **AnimationClip名(String)** * アニメーションはAnimationClip名で指定します。 **返り値** * 指定したアニメーションの現在の再生位置をnumber型で返します。 * 単位は秒です。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubItemAnime = Anime.GetAnimation() function onGrab() SubItemAnime.PlayFromIndex(0, false) end function onUse() local CurrentTime = SubItemAnime.GetCurrentTime("Anim1") print("CurrentTime: "..tostring(CurrentTime)); end 実行結果(Grabした後にUseした際の出力)\\ CurrentTime: 1.546 ===== GetCurrentTimeFromIndex ===== 使用するには下記の環境が必要です。 * UniVCI v0.39.1 以降 * VirtualCast 2.3.4a 以降 **GetCurrentTimeFromIndex: fun(index: number): number**\\ **インデックス番号(number)** * アニメーションはAnimationIndexのnumberで指定します。\\ Indexの割り当てルールは[[vci:script:reference:exportassets:audio#audioindex | こちら]]を確認してください。 **返り値** * 指定したアニメーションの現在の再生位置をnumber型で返します。 * 単位は秒です。 サンプル\\ local Anime = vci.assets.GetTransform("Anime") local SubItemAnime = Anime.GetAnimation() function onGrab() SubItemAnime.PlayFromIndex(0, false) end function onUse() local CurrentTime = SubItemAnime.GetCurrentTimeFromIndex(0) print("CurrentTime: "..tostring(CurrentTime)); end 実行結果(Grabした後にUseした際の出力)\\ CurrentTime: 1.546