TVML SDK on UNITY チュートリアル July, 2018 (TVML SDK Vesion1.4対応) 1
準備 SDKはUnityのプロジェクトとして提供される(フォルダ名:TvmlSDK1.4) まず、Unity 5.6.3f1 (32-bit)をインストールする Unityに関する注意事項(重要) SDKはWindowsのみでMACは無い。32ビットじゃないと音声合成が動かないので必ず32ビットのUnityを使うこと(Unityデフォルトでは64ビット) 32ビットインストーラーは、Unity Downloadページの「Older versions of Unity」へ行き、「Unity Editor 32-bit」をダウンロードしてインストールする 5.6.3ではこれでOKだが、古いUnityバージョンでは、これだけでは、Web Playerしか使えず、別途PCビルド用モジュールをインストールしないといけない。 同じく「Older versions of Unity」 で「Unity Installer」をダウンロードし、インストーラを起動し、インストールモジュール選択画面が出るので、そこで「Windows Build Support」にチェックを入れ、後のチェックをすべて外し、インストールする 以上でインストール終了。Unityを起動し、プロジェクトTvmlSDK1.4を開き、「File」~「Build settings」を選ぶ Platformの「PC, Mac & Linux Standalone」をクリックし、左下の「Switch Platform」ボタンを押す。以上で正しく起動する。
準備 このままでは、DLLで提供されている音声合成エンジンを起動できず、CGは動くが、しゃべらない。以下の操作を必ず行うこと。 DLLのパス設定(重要) インストールディレクトリの「Assets\Plugins」のディレクトリパスを以下の方法でシステムに登録する。 Assets\Pluginsを開いて、そのフルパスをコピーする Windowsの「システム情報」を起動する。 Windows10では少々分かりにくい。まず、設定を開き、そこの「システム」~「バージョン情報」を開く。その下の方に「システム情報」というリンクがあるので、それをクリックする。 左のいちばん下に「システムの詳細設定」があるので、それをクリック 「詳細設定」タブのいちばん下の「環境変数」ボタンをクリック ユーザー環境変数またはシステム環境変数に、変数「PATH」を入れ、その値に、最初にコピーした「Assets\Plugins」のフルパスを入れる。 Windows10の最新では、OKボタンを押せば、これで音声合成が使えるが、古いOSの場合は再起動が必要なことがあるので注意。
まずは動作チェック ProjectペインのAssets/TVMLSDK/Scenesの中のSceneファイルの"tvmlplayer"をダブルクリックする Unityの再生ボタンを押すとTVML Playerが起動する 注: Game再生画面の左上プルダウンで"Standalone(883x535)を選び、再生画面を十分大きく取っておく。そうしないとTVML Playerの操作ボタン類が隠れて出ない TVML Playerのファイル選択アイコンを押して、TVMLスクリプト(例:bimbo.txt)を選んで、再生ボタンを押す。 注: TVMLサンプルスクリプトはプロジェクトの"TvmlSDK1.4"フォルダの下の"TVMLScripts"フォルダの中にたくさん入っている。 下記のように再生が始まり、音声合成の音が出れば成功 TVML Playerの表示サイズは853x480でアスペクト比16:9で、YouTubeと同サイズにしてある。 10/04/11 T2V
TVML SDKとアプリ アプリ TVML SDK SDKの使い方 XXX.cs tvmlengine ◆基本動作: 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のインスタンスをゲットして ②メソッドをコールする 5
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) : 再生エリア設定 6
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); } ・・・・・・
「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に、ソースコードをドラグアンドドロップ ソースファイルのアタッチ 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(おじぎ)すれば成功
割り込みスクリプト メインスクリプト メインスクリプト 割り込みスクリプト#1 割り込みスクリプト#2 割り込みスクリプト#3 idling playScript() intteruptScript() メインスクリプト メインスクリプト 割り込みスクリプト#1 割り込みスクリプト#2 interruptScript() 割り込みスクリプト#3 割り込み 場所を 覚えている 割り込みスクリプトは、 最後の行まで行った後に ・すぐ前のスクリプトへ戻るか ・idlingになるか ・メインスクリプトに戻るか が選べる。 interruptScriptThenReturnToMain() idling idling 終わった時点の絵 でアイドリング idling 終わったらアイドリング interruptScriptThenIdling() 15
ヒント Assets/TVMLSDK/Scenesの中にtvmlplayer, interactive, 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 18