TVML SDK on UNITY
チュートリアル
October, 2015
(TVML SDK Vesion1.1対応)
林正樹
準備
• SDKはUnityのプロジェクトとして提供(フォルダ名:TvmlSDK1.1)
• Unity 5.1.1f1 (32-bit)をインストールする(またはこれ以降のバージョン)
注: SDKはWindowsのみ。32ビットじゃないと音声合成が動かないので必ず32ビットイ
ンストーラーをDownloadすること(Unityデフォルトでは64ビット)
• ”Assets\Plugins”をWindowsの環境変数に登録する。”システムのプロ
パティ~システムの詳細設定~環境変数”で”PATH = (絶対パス)
\TvmlSDK1.1\Assets\Plugins”を登録して、再起動する
注:これをしないと起動時にDLLエラーが出て音声合成が使えない
まずは動作チェック
• ProjectペインのAssets/TVMLSDK/Scenesの中のSceneファイルの
"TVMLPlayer"をダブルクリックする
• Unityの再生ボタンを押すとTVML Playerが起動する
注: Game再生画面の左上プルダウンで"Standalone(883x535)を選び、再生画面を十分
大きく取っておく。そうしないとTVML Playerの操作ボタン類が隠れて出ない
• TVML Playerのファイル選択アイコンを押して、TVMLスクリプト(例:
3people.txt)を選んで、再生ボタンを押す。
注: TVMLサンプルスクリプトは"Assets/TVMLSDK/Resources/TVML Scripts"の中にいく
つかある
• 下記のように再生が始まり、音声合成の音が出れば成功
• TVML Playerの表示サイズは853x480でアスペクト比16:9で、YouTube
と同サイズにしてある。
10/04/11
T2V
TVML SDKとアプリ
◆基本動作: TVMLスクリプトのstringを投げて再生する
アプリ
initialize();
setPlayerViewPortRect(0,0,1,1);
playScript(text);
TVML SDK
XXX.cs
tvmlengine
bool getStatusPlay();
SDKの使い方
tvmlengine teg = GetComponent<tvmlengine>();
teg.playScript(text);
①SDKのインスタンスをゲットして
②メソッドをコールする
T2VSDKのAPI一覧
tvmlengineクラス
initialize() : 初期化
playScript(string tvmlscript) : TVMLスクリプト再生
playScriptNoReset(string tvmlscript) : 同上(ただしresetしない)
interruptScript(string tvmlscript) : 割り込みスクリプト再生
interruptScriptThenIdling(string tvmlscript) : 同上。ただし終了後アイドリング
interruptScriptThenReturnToMain(string tvmlscript) : 割り込みスクリプト後メインへ戻る
returnToMainScript() : メインスクリプトへ戻る
int getLinenumber() : 現在再生中のTVML行番号を返す
bool getStatusPlay() : 現在、再生中か否か
int getInterruptDepth() : 割り込みのDepthを返す(最大:127)
play() : 再生開始
stop() : 停止。reset()もする。
pause() : ポーズ
restart() : 現在play()を同様
switchCamera(string cam) : カメラをスイッチングする
setPlayerViewPortRect(float x, float y, float width, float height) : 再生エリア設定
SDKプログラミング初歩
• HierarchyペインにあるオブジェクトをDeleteして空にする
• Assets/TVMLSDK/Scripts/Resources/にあるプレハブの"tvml"を
Hierarchyペインにドラグアンドドロップする
C#ソースファイル作成
Assets/aplicationsの下で右クリックしCreate~C# Scriptでソースファイル
を作成する
注: ファイル名とクラス名を同じにすること。そうしないとこの後アタッチするときエラーに
なる
using UnityEngine;
using System.Collections;
public class simple : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
コードを書く: エンジン取得
コンポーネントをゲットして初期化と、描画エリア設定
public class hayashi : MonoBehaviour {
tvmlengine teg;
void Start () {
teg = GetComponent<tvmlengine>();
teg.initialize();
teg.setPlayerViewPortRect(0, 0, 1, 1);
}
・・・・・・
コードを書く: TVMLスクリプト再生
「A」のキーを押すと、TVMLテキストファイルをメインスクリプトとし
て再生する
public class hayashi : MonoBehaviour {
tvmlengine teg;
public TextAsset txtAsset;
void Start () {・・・・・}
void Update() {
if( Input.GetKey(KeyCode.A))
{
teg.playScript(txtAsset.text);
}
}
ソースファイルのアタッチ
Hierarchyのtvmlに、ソースコードをドラグアンドドロップ
TVMLスクリプトのアタッチ
作成したソースコードのコンポーネント"txtAsset"に、適当なTVMLスクリプト
をドラグアンドドロップしてアタッチ
起動
再生ボタンを押して起動した後、「A」キーを押してTVMLスクリプトが再生さ
れれば成功
割り込みスクリプト再生
TVMLテキストファイルを割り込みスクリプトとして再生
以下のコードをupdate関数に追加
if( Input.GetKeyDown(KeyCode.N))
{
teg.interruptScript ("character:bow(name=A, speed=3, wait=no)\n");
}
Aキーで再生した後、Nキーを押してbow(おじぎ)すれば成功
割り込みスクリプト
playScript()
メインスクリプト
intteruptScript()
割り込みスクリプト#1
割り込みスクリプト#2
割り込みスクリプト#3
割り込み
場所を
覚えている
割り込みスクリプトは、
最後の行まで行った後に
・すぐ前のスクリプトへ戻るか
・idlingになるか
・メインスクリプトに戻るか
が選べる。
idling
idling
終わったらアイドリング
終わった時点の絵
でアイドリング
interruptScriptThenIdling()
idling
ヒント
 Assets/Scenesの中にTVML Player, interruption, autonewsの
シーンファイルが入っているので、それぞれダブルクリックして起
動してみるとよい。それぞれ、 TVML Player、簡単なインタラクテ
ィブアプリ、 WebのHTMLから自動的にアニメーション生成。
 Assets/applicationsの中に、上述のソースがある。
 Assets/TVMLSDK/Resourcesの下に、TVMLで使えるCGモデル
などのリソースが入っている。
 ムービーも使える。サンプルTVMLスクリプトのmovieplatetestを
再生するとわかる。
 セットやプロップなど静止したCGモデルはUnity Editor上で配置し
て使っても構わない(必ずしもTVMLスクリプトの中で定義しなくて
いい)
 デフォルトのままだと照明が暗く空気感も悪い。これはやはり
Unity Editor上でGI (Global Illumination)などの様々な機能を駆
使して作り込んでしまってもよい(必ずしもTVMLスクリプトの中で
light定義しなくていい)
 キャラクタの新規追加は別途手順が必要(問い合わせてください)
課題
 再生・停止・一時停止ボタンを追加してください
 行番号を表示してください
 クイズを仕込む
・ボタンを押すとキャラがカメラ目線になってクイズを出題し、
ユーザー入力待ちになる
・ユーザーがキー入力などで回答
・正解不正解を告げて、元のメインスクリプトへ戻る
TVML言語仕様
TVML言語仕様Version 3.1
http://wjis76df.sakura.ne.jp/t2vlab/spec/tvmlspec31/index.html
ダウンロード

TVML SDK