
別途追加シナリオパッケージで提供している *.fwk ファイルをダブルクリックすることで、ほかのシナリオを起動できます。
(シナリオのdefavatarの:controlパラメタが"default"の場合です)
が押されていない)時にのみ、F1キーを押すことにより[アバターの視点]<->[アバターの少し後方の視点]の切り替えができますカメラの歩行者追従モードではない(ツールバーの
が押されている)時、以下の操作が出来ます
シナリオはQ言語(詳しくはQ言語のHPを参照して下さい)で記述されますが、ここではとりあえず動くシナリオの書き方を中心に、例を挙げながら説明します(詳しい記述方法はQ言語のHPのダウンロードの所にあるQ言語の仕様書や、パッケージにあるFreeWalkV4のマニュアルを参照して下さい)
まずは、FreeWalk.iniの[Q]ScenarioFileNameで指定されたファイル(以降シナリオファイルと記述)の先頭に、
(load "define_cue_action.q")
(load "def_env.q")
と書きます。これは、[FreeWalkインストールフォルダ]\Q\フォルダにある2つのファイル、define_cue_action.q(パラメータの型の記述)とdef_env.q(環境設定の記述)を読み込むことを指定しています。
define_cue_action.qはこのままで何の問題もありませんが、def_env.qの方は主にネットワークを使用する時に必要になってきますので、ここで少し解説します。
(defenv name
:world_name
;; 環境の名前(string型)。nameと一致させることを推奨します。
:max_entry
;;存在可能なエージェント等の最大数(integer型)
:ip_address
;;接続先IPアドレス、又はマシン名(string型)
:port_number
;;接続先ポート番号(integer型)
:vrml_url
;;VRML参照先URL(string型)
:vrml_path
;;ローカルにあるVRMLフォルダの、[FreeWalkインストールフォルダ]からの相対パス(string型)
)
(例)
(defenv space0
:world_name "space0"
:max_entry 100
:ip_address "Machine0"
:port_number 12345
:vrml_url "/shijo_street/"
:vrml_path "data\shijo_street\")
このように記述し、Machine0上で「FreeWalkCommunityServer.exe 12345 space0」と実行することにより、Machine0上でコミュニティサーバが稼働します。
次に舞台となるシーン(ステージ)を準備します。シナリオファイルに以下の様に記述します。
(defscenario scenario-scene ()
(scene1))
(defagent Scene
;; シーンの名前。変数としてこの値を使用できる。
scenario-scene
;; 与えるシナリオ。ここでは何もしないシナリオscenario-sceneを与えている。
:machine "Machine0"
;; このシーンが稼働するマシン名
:location '(0.0 0.0 0.0 0.0)
;; 座標
:shape '("scene.wrl")
;; VRMLモデル
)
今度はユーザの操作するアバターを配置します。シナリオファイルに以下の様に記述します。
(defscenario scenario-user ()
(scene1))
(defavatar User
;; アバターの名前。変数としてこの値を使用できる。
scenario-user
;; 与えるシナリオ
:machine "Machine0"
;; このアバターが稼働するマシン名
:location '(10.0 0.0 10.0 0.0)
;; 初期位置(x座標[m] y座標[m] z座標[m] 向き[degree])
:shape '("user.wrl")
;; VRMLモデル
)
最後にシナリオを与えることにより自律的に動くエージェントを配置します。
(defagent agent
;; エージェントの名前。変数としてこの値を使用できる。
scenario-agent
;; 与えるシナリオ
:machine "Machine1"
;; このエージェントが稼働するマシン名
:location '(20.0 0.0 20.0 0.0)
;; 初期位置
:shape '("agent.wrl")
;; VRMLモデル
)
(defscenario scenario-agent ()
;; エージェントに与える簡単なシナリオ。
;; ユーザの操作するアバターが近くにいたら、その場を行ったり来たりする。
(scene1
((?position :name_s User :distance_range '(0.0 5.0))
;; Userが0.0〜5.0の範囲にいれば
(!walk :route '((0.0 5.0)) :relative #t)
;; 今の自分の位置から相対的に(0.0 5.0)だけ歩いて
(go scene2)))
;; scene2へと移る
(scene2
((?position :name_s User :distance_range '(0.0 5.0))
(!walk :route '((0.0 -5.0)) :relative #t)
(go scene1))))
詳しくはマニュアルを参照してもらうとしまして、ここでは主に使うであろう物を説明します。なお、特に断りをしない限り、ファイル名やフォルダ名を指定する物はFreeWalk.exeのあるフォルダ([FreeWalkインストールフォルダ]\Program\)からの相対パス、又は絶対パスで指定します。
FreeWalkに関するTipsを随時追加していきます。
Please send questions to "fw-admin at lab7.kuis.kyoto-u.ac.jp"