Language:

サイドバー

バーチャルキャスト公式Wiki

メニュー

Steam版

デバイス

アセット

配信

その他

リリース情報

デベロッパー向け


開発環境

GLB

vci:script:reference:exportanimation

ExportAnimation(アニメーション)

このページは過去の情報となります。
新しいスクリプトリファレンスはこちらになります。

アニメーションに関するクラスです。
アニメーションの設定は、 Animationを組込んだEmptyの子に動かしたいObjectを置くをご覧ください。

ExportTransform
名前 説明 バージョン
GetAnimation VCI内のアニメーションを取得
ExportAnimation
名前 説明 バージョン
GetCount アニメーションの数を取得
GetNames アニメーションの名前を取得
HasClip アニメーションが存在するかどうか1.8.2a以降
IsPlaying アニメーションが再生中かどうか1.8.2a以降
Play 再生
PlayFromIndex インデックス番号で指定して再生
PlayFromName ファイル名で指定して再生
PlayOneShot アニメーションを1回だけ再生
Play(false)に相当します。
PlayWithState 状態を指定して再生1.8.2a以降
Blend アニメーションをブレンドして再生1.8.2a以降
CrossFade アニメーションをクロスフェードして再生1.8.2a以降
SetState アニメーションの状態を指定1.8.2a以降
SetTime アニメーションの再生時間を指定2.3.9a以降
Stop 再生を停止1.8.2a以降
Rewind 再生中のアニメーションを巻き戻し1.8.2a以降
GetDuration アニメーションの長さ(ファイル名)2.3.4a以降
GetDurationFromIndex アニメーションの長さ(インデックス番号)2.3.4a以降
GetCurrentTime アニメーションの再生位置(ファイル名)2.3.4a以降
GetCurrentTimeFromIndex アニメーションの再生位置(インデックス番号)2.3.4a以降

_ALL_ を含む関数は、他のクライアントでも実行され同期します。
全てのクライアントで同じ結果になってほしい場合は _ALL_ を含む関数を使用してください。

Play
_ALL_Play
  • アニメーションが付いているオブジェクトはSubItemである必要はありません。

設定可能項目

設定可能項目の一覧 (クリックで展開)
PlayWithState, SetStateの設定可能項目
名前 説明
speednumber再生速度を指定します。デフォルト値は1です。0以上の値を設定してください。
weightnumberブレンドウェイトを指定します。デフォルト値は1です。0以上1以下の値を設定してください。
wrap_mode stringラップモードを指定します。デフォルト値はonceです。once, loop, ping_pongを指定できます。

設定例

tableをjsonに変換して渡します。

main.lua
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に相当する機能です。 Animation.Blend

設定例

tableをjsonに変換して渡します。

main.lua
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に相当する機能です。 Animation.CrossFade

設定例

tableをjsonに変換して渡します。

main.lua
anim.CrossFade("アニメーション名", json.serialize({fade_length=1}))

オプションを指定しない場合は、空文字列を渡してください。

main.lua
anim.CrossFade("アニメーション名", ""))

サンプル

main.lua
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

アニメーションの数を取得します。

サンプル

main.lua
local Anime = vci.assets.GetTransform("Anime")
local SubitemAnime = Anime.GetAnimation()
function onUse(use)
    print(SubitemAnime.GetCount())
end

実行結果

2

GetNames

GetNames: fun(): usertype

アニメーションの名前を取得します。

サンプル

main.lua
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

アニメーションが存在するかどうかを示します。

サンプル

main.lua
local Anime = vci.assets.GetTransform("Anime")
local SubitemAnime = Anime.GetAnimation()
function onUse(use)
    print(SubitemAnime.HasClip("Anim1"))
end

実行結果

true

IsPlaying

IsPlaying: fun(): bool

アニメーションが再生中かどうかを示します。

サンプル

main.lua
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回だけ再生されます。

サンプル

main.lua
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回だけ再生されます。

サンプル

main.lua
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回だけ再生されます。

サンプル

main.lua
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)に相当します。

サンプル

main.lua
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)

状態を指定して再生します。

名前 説明
speednumber再生速度を指定します。デフォルト値は1です。0未満を指定した場合逆再生になります。
weightnumberブレンドウェイトを指定します。デフォルト値は1です。0以上1以下の値を設定してください。
wrap_mode stringラップモードを指定します。デフォルト値はonceです。once, loop, ping_pongを指定できます。

サンプル

main.lua
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に相当する機能です。 Animation.Blend

サンプル

main.lua
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に相当する機能です。 Animation.CrossFade

オプションを指定しない場合は、空文字列を渡してください。

サンプル

main.lua
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)

アニメーションの状態を指定します。

名前 説明
speednumber再生速度を指定します。デフォルト値は1です。0以上の値を設定してください。
weightnumberブレンドウェイトを指定します。デフォルト値は1です。0以上1以下の値を設定してください。
wrap_mode stringラップモードを指定します。デフォルト値はonceです。once, loop, ping_pongを指定できます。

サンプル

main.lua
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)

アニメーションの再生時間を指定します。

サンプル

main.lua
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()

アニメーションの再生を停止します。

サンプル

main.lua
local Anime = vci.assets.GetTransform("Anime")
local SubitemAnime = Anime.GetAnimation()
function onUse(use)
    SubitemAnime.Stop()
end

実行結果

再生されているアニメーションが停止します。

Rewind

Rewind: fun()
_ALL_Rewind: fun()

再生中のアニメーションを巻き戻します。

サンプル

main.lua
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型で返します。
    • 単位は秒です。

サンプル

main.lua
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の割り当てルールは こちらを確認してください。

返り値

  • 指定したアニメーションの長さをnumber型で返します。
    • 単位は秒です。

サンプル

main.lua
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型で返します。
    • 単位は秒です。

サンプル

main.lua
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の割り当てルールは こちらを確認してください。

返り値

  • 指定したアニメーションの現在の再生位置をnumber型で返します。
    • 単位は秒です。

サンプル

main.lua
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
vci/script/reference/exportanimation.txt · 最終更新: 2023/08/28 20:07 by pastatto

ページ用ツール