mpml | MPMLドキュメントのルート要素 |
---|
head | MPML-VRドキュメントのヘッダ情報 |
---|---|
meta | メタデータ記述 |
title | タイトルの設定 |
root-layout | MPML-VRプレゼンテーションウィンドウの設定 |
agent | プレゼンテーションに使用するエージェントの設定 |
body | プレゼンテーションスクリプト本体の定義 |
---|---|
page | プレゼンテーションの1ページを定義 |
scene | プレゼンテーションの1シーンを定義 |
events | シーン内に発生したイベントを受け取るハンドラの登録 |
object | VRMLオブジェクトの取り込み |
seq | シーケンシャルスクリプト |
---|---|
par | パラレルスクリプト |
emotion | エージェントの感情の設定 |
---|---|
turn | エージェントの方向を変える |
move | エージェントの移動 |
play | エージェントのアニメーション実行 |
look | エージェントの視線管理 |
speak | エージェントの発話 |
emph | エージェントの発話における強調 |
think | エージェントのつぶやき |
listen | 音声認識のON/OFF |
call | オブジェクトVRMLのメソッド呼び出し |
---|---|
set-viewpoint | プレゼンテーションの視点の設定 |
activate-event | 各イベントの有効・無効を制御 |
exit | コンテンツ実行終了 |
label | ラベルの定義 |
jump | 指定されたロケーションへジャンプします |
heard | ある単語・フレーズを音声認識で聞き取った時に発生するイベント |
---|---|
world-proximity | 視点が領域に入ることによって発生するイベント |
world-visibility | ワールド内の物体の可視性によって発生するイベント |
world-touch | ワールド内の物体とマウスの位置関係により発生するイベント |
MPMLドキュメントのルート要素
要素<mpml> は、MPMLドキュメントのルート要素です。 MPML-VRドキュメントとして宣言する場合には、 version に "vr" を指定しなければなりません。 MPML-VRドキュメントの内容は、すべて 要素<mpml> の子孫要素として記述します。
MPML-VRドキュメントは、XMLドキュメントの一種であるために、 MPML-VRファイルの先頭に以下の様な記述が必要となります。 (以下の例はencodingをたまたま"shift_jis"に設定したものであり、それを強要するものではありません。)
<?xml version="1.0" encoding="shift_jis" ?>
本文書で、MPML-VRの実装について規定しませんが、MPML-VR Viewer Ver.1.0では、 XSLTを用いてプレイヤーを実装しているため、上述のXML宣言のほかに、 XSLスタイルシートの設定を以下のように行わなければなりません。
<?xml-stylesheet type="text/xsl" href="mpml-vr.xsl" ?>
以上のようなMPML-VRのXML関連の事項については、MPML-VR Viewerの実装によって変更になる場合があります。
<?xml version="1.0" encoding="shift_jis" ?> <?xml-stylesheet type="text/xsl" href="mpml-vr.xsl" ?> <mpml version="vr"> <head> <!-- ここにヘッダ情報を記述する --> </head> <body> <!-- ここにプレゼンテーションドキュメントの本体を記述する --> </body> </mpml>
MPML-VRドキュメントのヘッダ情報
要素<head> は、3次元プレゼンテーションに関するヘッダ情報を格納するための要素です。 要素<head> には、MPML-VRドキュメント全体に関する補助情報を記述します。
メタデータ記述
要素<meta> には、3次元プレゼンテーションのタイトルや著作権情報などの様々なプロパティを記載することができます。 要素<meta> には、それぞれ1組ずつの「プロパティ名」と「その値」を name と content として記述します。 name と content は必ず組で存在しなければなりません。
name の属性値についてMPML-VRでは規定しませんが、 MPML Ver.2.0eでも採用されている以下の値を推奨します。
属性値 | 属性値の解説 | 内容の例 |
---|---|---|
titl | プレゼンテーションの日本語タイトル | MPML-VRについて |
tite | プレゼンテーションの英語タイトル | Abount MPML-VR |
aupk | プレゼンテーションの著者の日本語名 | 岡崎 直観 |
aupe | プレゼンテーションの著者の英語名 | Naoaki Okazaki |
conf | 発表会議名 | 情報処理学会第57回全国大会 |
cond | 発表の行われた日 | 20010315 |
host | 発表学会 | 情報処理学会 |
kywd | 日本語キーワード | VR-MPML エージェント VRML |
kywe | 英語キーワード | VR-MPML agent VRML |
writer | スクリプトの著者 | N.Okazaki |
wrid | スクリプトの書かれた日 | 20010214 |
pred | プレゼンテーションの行われた日 | 20010315 |
vafd | プレゼンテーションの有効期限 (from) | 20010315 |
vatd | プレゼンテーションの有効期限 (to) | 20000315 |
<head> <meta name="titl" content="3次元プレゼンテーション言語MPML-VR" /> <meta name="aupe" content="N.Okazaki" /> <meta name="wrid" content="20010214" /> </head>
タイトルの設定
要素<title> は、MPML-VRプレゼンテーションのタイトルを定義します。
<head> <title> MPML-VR Ver.1.0について </title> </head>
MPML-VRプレゼンテーションウィンドウの設定
要素<root-layout> は、MPML-VRプレゼンテーションウィンドウの配置を設定します。 プレゼンテーションウィンドウは、 ( left , top )を左上の座標とし、、 width , height のサイズを持つものとなります。
デフォルトでは、プレゼンテーションウィンドウの大きさが最大になるように配置されます。
<head> <root-layout width="80%" height="80%" /> </head>
プレゼンテーションに使用するエージェントの設定
要素<agent> は、MPML-VRプレゼンテーションに使用するエージェントを設定します。
MPML-VRではプレゼンテーションに現れるエージェントすべてに名前を付けて管理することによって、 プレゼンテーションエージェントを複数存在させた場合でもそれぞれを区別できるようにしています。
要素<agent> は、 id という名前のエージェントを宣言し、 その実体として profile-url というURLに置いてあるエージェントプロフィールを利用するように MPML-VR Viewerに指示します。
要素<agent> ではさらに、プレゼンテーションワールドVRMLの中へエージェントを取り込む際、 ワールドVRML中の location で示されるノードの位置へエージェントを出現さるように MPML-VR Viewerに指示します。
profile-url で指定するエージェントプロフィールでは、エージェントVRMLファイル名、 音声出力のパラメータ、移動時の時間などのエージェント固有の設定をXMLドキュメントとしてまとめて記述することができます。 これにより、各エージェントに特徴を持たせることができます。 このエージェントプロフィールファイルの詳細については、エージェントプロフィール仕様書を参照してください。
<head> <agent id="Agent" profile-url="andy.ap" location="StartPosition" /> </head>
プレゼンテーションスクリプト本体の定義
要素<body> は <page> 以下で記述されるプレゼンテーションスクリプトを実行します。 <page> の中で最初に実行されるのは、 要素<body> 以下で最初に現れる <page> です。
プレゼンテーションの1ページを定義
要素<page> は、 world-url で指定されるワールドVRMLファイルを使用し、 id というラベルで、MPML-VRプレゼンテーションのひとつのページを定義します。 MPML-VRのプレゼンテーションの1ページは、 world-url で指定されるワールドVRMLが変更されないものと定義されます。
caption には、ページのタイトルを指定します。 MPML-VRのプレイヤーは、この属性値を使ってプレゼンテーションの目次を構成することができます。
要素<page> の子要素として、 <scene> を任意の個数定義することによって、 ひとつのページの中に、シーンと呼ばれるブロックを定義することができます。 MPML-VRのプレゼンテーションスクリプトは、必ず <scene> の中に記述します。
<body> <!-- Page1 --> <page id="Page1" caption="ページ1" world-url="http://hoge/world01.wrl"> <scene id="Scene1" caption="シーン1"> <!-- Scene1の内容 --> </scene> ... </page> <!-- Page2 --> <page id="Page2" caption="ページ1" world-url="http://hoge/world02.wrl"> <scene id="Scene1" caption="シーン1"> <!-- Scene1の内容 --> </scene> </page> ... </body>
プレゼンテーションの1シーンを定義
要素<scene> は、その子要素をひとまとめにして id という名前の1シーンを定義します。 シーンとは、以下の2つの要素を持つものとします。
イベントハンドラでは、シーン内で起こる様々なイベントに対する処理を記述します。 例えば、 <vrml-touch> を使って、
<scene> <events> <vrml-touch id="Event1" location="Picture1" jump-to="Scene03" /> </events> <seq> ... </seq> </scene>
と記述すると、シーンスクリプト実行中にユーザーが、 "Picture1"というVRMLノードをマウスでクリックすることにより、 実行中のシーンスクリプトを中断し、"Scene03"へジャンプするということを実現できます。
イベントハンドラは、シーンごとに独立して管理されます。あるシーンのイベントハンドラが有効となるのは、 直下の子孫要素として記述されているシーンスクリプトを実行中の場合だけです。
シーンスクリプトとは、そのシーンにおいて実行されるプレゼンテーションの内容を記したもので、 必ず、 <seq> の中に記述します。 MPML-VR Viewerは、 <seq> の子要素を順に実行していき、 最後の要素の実行が終わると、待機状態になります。 待機状態は、何らかのイベントが発生するまで続くので、 「ユーザーの指示待ち」として使うことができます。 待機状態に陥らせずに別のシーンスクリプトの実行を始めたい場合は、 <jump> を使います。
caption で示されるシーンのタイトルをつけることができます。
<body> <!-- Page1 (無限ループ) --> <page id="Page1" world-url="http://hoge/sample/world01.wrl"> <scene id="Scene1"> <!-- Scene1の内容 --> <seq> <jump to="Scene2" /> </seq> </scene> <scene id="Scene2"> <!-- Scene2の内容 --> <seq> <jump to="Scene1" /> </seq> </scene> </page> </body>
シーン内に発生したイベントを受け取るハンドラの登録
要素<events> の子要素として各種イベントに対する処理を登録できます。 要素<events> の子要素として定義したイベントのうち、どれか1つでも発生すると、 現在実行中のシーンスクリプトの実行は中断され、ハンドラの指示に従います。
<!-- 音声入力によるジャンプの例 --> <body> <page id="Page1" world-url="http://hoge/sample/world01.wrl"> <scene id="Scene1"> <events> <!-- 音声入力から'Next'という単語を認識したときに Scene2を実行するように設定します --> <heard id="event1" agent="Agent" voice="Next" jump-to="Scene2" /> </events> <seq> <!-- 音声入力をアクティブにします --> <listen agent="Agent" /> </seq> </scene> <scene id="Scene2"> <seq> <!-- 'Next'という単語を認識したときの処理 --> ... </seq> </scene> </page> </body>
VRMLオブジェクトの取り込み
要素<object> は url で指定されたオブジェクトプロフィールの設定を もとに、現在のシーンの中にVRMLオブジェクトを取り込み、 id で 指定されるIDを割り当てます。 このとき、オブジェクト取り込み位置を location で指定できます。
要素<object> で取り込まれた要素は、 <call> を用いて制御することが できます。
<scene id="Scene1"> <!-- TVの取り込み --> <object id="TV" url="http://hoge/samples/parts/Television.xml" location="PosTV" /> </scene>
シーケンシャルスクリプト
要素<seq> の子要素は、そのテキスト内に現れる順番に従って実行されます。
要素<seq> は、動作の実行猶予をサポートしており、 実際にシーケンシャル実行が開始されるのは begin [ms]後です。
<!-- <seq>の子要素は出現順に実行されます --> <seq> <play agent="Agent" act="greet" /> <speak agent="Agent"> Please say 'Left' or 'Right'. </speak> <listen agent="Agent" /> </seq>
パラレルスクリプト
要素<par> の子要素は、そのテキスト内に現れる順序に関わらず、すべて並行して実行されます。 すべての子要素の実行が終了した時点で、 要素<par> の実行は終了したと見なされます。 子要素として <seq> を含ませ、複数の要素のシーケンシャル実行を ひとつのスレッドとして見立てることもできます。
要素<par> は文法上、複数のアニメーション動作を同時に行わせたり、 複数のテキストを同時にしゃべらせることが可能となりますが、 そのような動作を行わせた場合の結果は保証されません。
要素<par> は、動作の実行猶予をサポートしており、 実際にパラレル実行が開始されるのは begin [ms]後です。
<seq> <!-- しゃべりながら歩いてお辞儀をする --> <par> <seq> <move agent="Agent" how="walk" location="Center" /> <play agent="Agent" act="greet" /> </seq> <speak agent="Agent">Welcome to the MPML-VR. </speak> </par> <!-- <seq>と<speak>の実行が終わったらここに実行が移ります --> ... </seq>
エージェントの感情の設定
要素<emotion> は agent で示されるエージェントキャラクタの感情を type に設定します。
要素<emotion> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。 尚、 要素<emotion> を <par> の子要素として用いた場合の結果は保証されません。
<seq> <!-- エージェントの感情を"sad"にします --> <emotion agent="Agent" type="sad"> <speak agent="Agent"> I'm sorry. </speak> </emotion> <!-- 顔の表情を変えずに0.5秒後に感情を"angry"にします --> <emotion agent="Agent" type="angry" begin="500"> <think agent="Agent"> How rude! </think> </emotion> </seq>
エージェントの方向を変える
要素<turn> は agent で示されるエージェントを location の方向に回転させます。 回転に要する時間は、エージェントプロフィールの設定や、 移動距離などから自動的に算出されますが、 speed にて移動時間を スケーリングすることができます。 この場合、各々の手順にかける時間は speed 倍されます。
要素<turn> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- Agentを0.5秒後にRightの方向に向かせます --> <turn agent="Agent" location="Right" begin="500" /> </seq>
エージェントの移動
要素<move> は agent で示されるエージェントを移動させます。
MPML-VRにおけるエージェントの移動は以下のような手順の連続として実行されます。
まず、エージェントを移動先 location の方向へ振り向かせます。 このときの回転角度は、エージェントの現在位置と location で示されるVRM-Translationノードのtranslationフィールド位置をもとに 自動的に計算されます。 回転の実装は、VRMLのRotationInterpolatorノードによって行われます。
次に、キャラクタエージェントを移動先まで平行移動させます。 これにより、キャラクタエージェントの座標が変更されます。 平行移動の実装は、VRMLのPositionInterpolatorノードによって行われるとともに、 平行移動時は、 how で示されるアニメーションを同時実行させることができます。 how で平行移動時のアニメーションを追加することにより、 エージェントが歩いたり、走ったりするのを表現することができます。
最後に、キャラクタエージェントを向かせたい方向へ回転させます。 エージェントの向きは、 location で示されるVRMLノードのRotation子ノードの回転になります。 最初の回転と同様、この回転の実装もVRMLのRotationInterpolatorノードによって行われます。
以上の3動作の連結により、エージェントの移動が表現されます。
上記の回転・平行移動に要する時間は、エージェントプロフィールの設定や、 移動距離などから自動的に算出されますが、 speed にて移動時間を スケーリングすることができます。 この場合、各々の手順にかける時間は speed 倍されます。
要素<move> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- AgentをCenterへ歩かせます --> <move agent="Agent" how="walk" location="center" /> </seq>
エージェントのアニメーション実行
要素<play> は agent で示されるエージェントキャラクタに act の動作を実行させます。 <par> ノードを用いてエージェントキャラクタに2つ以上の動作を実行させたときの結果は保証されません。
要素<play> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- Agentにお辞儀(greet)をさせます --> <play agent="Agent" act="greet" /> <!-- 1秒後にAgentに手を叩かせます --> <play agent="Agent" act="applaud" begin="1000" /> </seq>
エージェントの視線管理
要素<look> は agent で示されるエージェントキャラクタの目線を direction で示された方向にします。 要素<look> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- キャラクタの視線を右に向けます --> <look agent="Agent" direction="right" /> </seq>
エージェントの発話
要素<speak> は agent で示されるエージェントキャラクタに PCDATAで示された内容を喋らせます。 要素<speak> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- テキストデータとして喋らせたい内容を記述します --> <speak agent="Agent"> Hello, MPML-VR World. </speak> <!-- 0.5秒後に喋らせます --> <speak agent="Agent" begin="500"> My name is Agent??? </speak> </seq>
エージェントの発話における強調
要素<emph> は <speak> の子要素で、PCDATAで示された内容を強調します。 flag によって強調動作の有無を、 strength によって強調動作の大きさを指定することができます。 <par> ノードを用いて <play> と並列に実行させたときの結果は保証されません。 また、 flag がoffに設定された場合、 strength の設定は反映されません。
要素<emph> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- "MPML-VR"というフレーズを強調します --> <speak agent="Agent"> Hello, <emph>MPML-VR</emph> World. </speak> <!-- 動作を伴わない強調 --> <speak agent="Agent"> My name is <emph flag="off">Agent</emph>??? </speak> </seq>
エージェントのつぶやき
要素<think> は agent で示されるエージェントキャラクタに PCDATAで示された内容をつぶやかせます。 この場合、吹き出しの中につぶやきの内容が表示されますが、音声としては出力されません。 要素<think> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <!-- テキストデータとして喋らせたい内容を記述します --> <think agent="Agent"> I'm OK? </speak> </seq>
音声認識のON/OFF
要素<listen> は agent で示されるエージェントキャラクタの 音声認識処理を開始/終了します。 <flag> が"True"の場合は音声認識を開始、"False"の時は音声認識を終了します。 要素<listen> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。
<seq> <label id="LeftRightListen" /> <speak agent="Agent"> Please say 'left' or 'right'. </speak> <!-- 音声認識を有効にします --> <listen agent="Agent" flag="True" /> <!-- 10秒後に音声認識を無効にします --> <listen agent="Agent" flag="False" begin="10000" /> <!-- もう一度メッセージを表示させます --> <jump to="LeftRightListen" /> </seq>
オブジェクトVRMLのメソッド呼び出し
要素<call> は、 object というIDを持つVRMLオブジェクトの method というメソッドを呼び出し、 value というパラメータを渡します。
メソッド呼び出しは、 object のプロフィールの、 method要素を参照し、その記述に従った オブジェクトプロフィールは、メソッド名、呼び出しの型情報、 非同期/同期を設定することができ、 要素<call> はその情報に従ってメソッド呼び出しを行います。
要素<call> は、動作の実行猶予をサポートしており、実際にメソッド呼び出しが発生するのは begin [ms]後です。
<!-- object="TV"のオブジェクトプロフィールの内容 -- <vrml-object url="file://hoge/Parts/television.wrl" node="dad_Group1"> <call> <method id="url" type="MFString" node="Movie1" field="url" /> <method id="start" type="SFTime" node="Script_Television" field="startAt0" sync-node="Script_Television" sync-field="triggerStop" /> </call> </vrml-object> --> <seq> <!-- "url"というメソッドは非同期で呼び出されます --> <call object="TV" method-name="url" value="http://hoge/Parts/sample.mpg" /> <!-- "start"というメソッドは同期で呼び出されます --> <call object="TV" method-name="start" value="1" /> </seq>
プレゼンテーションの視点の設定
プレゼンテーションの視点を location で示されるVRML-Viewpointノードへ移動させます。 transition が"True"に設定されている場合は、視点移動を実行するときに、 location へ滑らかに移動させます。
<!-- カメラの位置をCameraCenterへ移動させます --> <set-viewpoint location="CameraCenter" />
各イベントの有効・無効を制御
要素<activate-event> は、 event という名前のイベントの有効・無効を設定します。 <events> の子要素として定義されているイベントハンドラは、有効の場合にのみ動作します。 たとえ、該当するイベントが発生したとしても、 イベントハンドラが無効に設定されている場合は、イベント処理は行われません。
これにより、エージェントのプレゼンテーションが完了するまでユーザー入力を受け付けない等の 制御を行うことができます。
要素<activate-event> は、動作の実行猶予をサポートしており、実際に設定が行われるのは begin [ms]後です。
<scene> <events> <!-- "exJump"は「初期状態 = 無効」として登録します --> <vrml-touch id="evJump" node="Arrow" jump-url="http://hoge/" active="false" /> </events> <seq> <!-- 以降に書くプレゼンテーションに"evExit"が割り込むことはありません --> ... <speak agent="Agent">Now, please touch the arrow in the screen.</speak> <activate-event event="exJump" flag="True" /> <!-- 以降、"evExit"による割り込みは許可されます --> </seq> </scene>
コンテンツ実行終了
要素<exit> はコンテンツの実行を終了します。
<seq> <!-- 処理を終了します。 --> <exit/> </seq>
ラベルの定義
要素<label> は <jump> の飛び先を定義します。
<seq> <!-- 本当にすみません!? --> <label id="Loop" /> <play agent="Agent" act="greet" > <jump to="Loop" /> </seq>
指定されたロケーションへジャンプします
要素<jump> は to もしくは、 url のどちらか一方を記述して使用します。
to を記述した場合は、そのラベルの場所へ実行を移します。 <label> で定義されたラベルだけでなく、 <scene> の id 属性もラベルとしての性質を持つので、 要素<jump> の飛び先として使用することができます。
url を記述した場合は、そのURLのドキュメントを開きます。 url のドキュメントの種類は、ブラウザで開けるものであれば問いません。 これにより、現在のMPML-VRドキュメント外へのハイパーリンクを実現できます。 もちろん、ジャンプ先URLがMPML-VRドキュメントでも構いません。
<scene id="Scene1"> <seq> <!-- Scene2へジャンプします --> <jump to="Scene2" /> </seq> </scene> <scene id="Scene2"> <seq> <!-- "http://www.miv.t.u-tokyo.ac.jp/"をブラウザで開きます --> <jump url="http://www.miv.t.u-tokyo.ac.jp/" /> </seq> </scene>
ある単語・フレーズを音声認識で聞き取った時に発生するイベント
要素<heard> は、 agent というエージェントが voice で 指定される単語・フレーズを聞き取ったときに、イベントを発生させます。
イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-to と jump-url はどちらか一方のみ記述できます。
caption は、このイベントに結び付けられている見出しで、 MPML-VRプレイヤーによっては、プレゼンテーションウィンドウ内に表示される場合があります。
<events> <!-- 音声入力から'Next'という単語を認識したときに SceneNextを実行するように設定します --> <heard id="event1" agent="Agent" voice="Next" jump-to="SceneNext" /> </events>
視点が領域に入ることによって発生するイベント
要素<world-proximity> は、 center と size で指定されるワールド内の領域に、 ユーザーが入っているとき、イベントを発生させます。
イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-to と jump-url はどちらか一方のみ記述できます。
continuous が"True"の時は、イベント発生事象が解除されない限り、同じイベントを連続して何回も発生させます。 continuous が"False"の時は、イベントが1回発生すると、イベント発生事象がいったん解除されない限り、 続けてイベントが発生することはありません。 デフォルトでは continuous = "False"となっています。
<events> <!-- 中心座標(0, 0, 0)、サイズ(5, 5, 5)の境界箱の中にユーザーが 入ったときに、SceneNextを実行します。 --> <world-proximity id="event1" center="(0, 0, 0)" size="(5, 5, 5)" jump-to="SceneNext" /> </events>
ワールド内の物体の可視性によって発生するイベント
要素<world-visibility> は、 location で指定されるワールド内の物体が、 プレイヤーウィンドウの視界の中にあるとき、イベントを発生させます。
イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-to と jump-url はどちらか一方のみ記述できます。
continuous が"True"の時は、イベント発生事象が解除されない限り、同じイベントを連続して何回も発生させます。 continuous が"False"の時は、イベントが1回発生すると、イベント発生事象がいったん解除されない限り、 続けてイベントが発生することはありません。 デフォルトでは continuous = "False"となっています。
caption は、このイベントに結び付けられている見出しで、 MPML-VRプレイヤーによっては、プレゼンテーションウィンドウ内に表示される場合があります。
<events> <!-- "Box01"がユーザーの視点に入ったとき、SceneNextを実行します。 --> <world-visibility id="event1" location="Box01" jump-to="SceneNext" /> </events>
ワールド内の物体とマウスの位置関係により発生するイベント
要素<world-touch> は、 location で指定されるワールド内の物体と、 マウスの位置の間に type の関係が発生することによって、イベントを発生させます。
イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-to と jump-url はどちらか一方のみ記述できます。
type には、以下の値が指定できます。
typeの値 | 説明 |
---|---|
Click | マウスがワールド内物体の上でクリックされたときにイベントを発生させます。 |
Touch | マウスのボタンがワールド内物体の上で押下されたときにイベントを発生させます。 |
Over | マウスがワールド内物体の上に存在するときにイベントを発生させます。 |
caption は、このイベントに結び付けられている見出しで、 MPML-VRプレイヤーによっては、プレゼンテーションウィンドウ内に表示される場合があります。
<events> <!-- "Box01"がユーザーがクリックしたときに、SceneNextを実行します。 --> <world-touch id="event1" type="Click" location="Box01" jump-to="SceneNext" /> </events>