~~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