2007年12月07日
libsecondlifeサンプル - テレポートと現在位置
テレポートを使ってアバターを遠く離れた場所に短時間で移動させることができます。
テレポート先の指定には2つの方法があります。
(1)SIM名とSIM内の位置
(2)ランドマークのUUID
順に説明します。
(1)SIM名とSIM内の位置を指定してテレポートする
SIM名の文字列と、SIM内の位置をベクトル型で指定してテレポートします。
例:Karuizawaシムの145, 250, 22 にテレポートする場合
(2)ランドマークのUUIDを指定してテレポートする
UUIDをUUID型で指定してテレポートします。
あらかじめ公式ビューアでインベントリからランドマークを探して、
右クリックして"Copy Asset UUID"を選んでUUIDを取得しておくとよいでしょう。
テレポート時に何かしたい場合は、以下のようにOnTeleportイベントをハンドルできます。
client.Self.OnTeleport += libsecondlife.AgentManager.TeleportCallback(teleportHandler)
イベントハンドラ側は3つの引数(message, status, flags)を持ちます。
例えば以下のような情報を得られます。
テレポートの開始と終了で2回は呼ばれるので注意が必要です。
例1:ランドマークを使ってテレポートを開始
message= Teleport started
status= Start
flags= ViaLandmark
例2:SIM名と位置を指定したテレポートが完了
message = Teleport finished
status = Finished
flags = ViaLocation
以下はサンプルコードです。
イベントクラスを定義していますが、実際は使っていません(手抜き^^;)
テレポート先の指定には2つの方法があります。
(1)SIM名とSIM内の位置
(2)ランドマークのUUID
順に説明します。
(1)SIM名とSIM内の位置を指定してテレポートする
SIM名の文字列と、SIM内の位置をベクトル型で指定してテレポートします。
例:Karuizawaシムの145, 250, 22 にテレポートする場合
simName = 'Karuizawa'
pos = libsecondlife.LLVector3(145, 250, 22)
client.Self.Teleport(simName, pos)
(2)ランドマークのUUIDを指定してテレポートする
UUIDをUUID型で指定してテレポートします。
あらかじめ公式ビューアでインベントリからランドマークを探して、
右クリックして"Copy Asset UUID"を選んでUUIDを取得しておくとよいでしょう。
lmUuid = libsecondlife.LLUUID('51daae92-4279-3530-82a6-349fe31a87bb')
client.Self.Teleport(lmUuid)
テレポート時に何かしたい場合は、以下のようにOnTeleportイベントをハンドルできます。
client.Self.OnTeleport += libsecondlife.AgentManager.TeleportCallback(teleportHandler)
イベントハンドラ側は3つの引数(message, status, flags)を持ちます。
例えば以下のような情報を得られます。
テレポートの開始と終了で2回は呼ばれるので注意が必要です。
例1:ランドマークを使ってテレポートを開始
message= Teleport started
status= Start
flags= ViaLandmark
例2:SIM名と位置を指定したテレポートが完了
message = Teleport finished
status = Finished
flags = ViaLocation
以下はサンプルコードです。
イベントクラスを定義していますが、実際は使っていません(手抜き^^;)
#libsecondlifeのロード
import clr
clr.AddReferenceToFile("libsecondlife.dll")
import libsecondlife
import time
#ログイン情報の設定
firstName = 'abcd' #苗字
lastName = 'efgh' #名前
passWord = 'ijkl' #パスワード
#イベント待ち合わせ用クラスの定義
class EventTracker:
def __init__(self):
self.data=False
def Clear(self):
self.data=False
def Set(self):
self.data=True
def Wait(self):
while not self.data:
time.sleep(0.1)
#テレポートイベント処理用ハンドラの定義
def teleportHandler(message, status, flags):
print 'message=', message
print 'status=', status
print 'flags=', flags
event.Set()
#現在位置を表示する関数の定義
def printCurrentLocation():
global client
print 'current sim =', client.Network.CurrentSim.Name, ',',
print 'pos =', client.Self.Position.ToString()
#初期設定、
event = EventTracker()
client = libsecondlife.SecondLife()
client.Self.OnTeleport += libsecondlife.AgentManager.TeleportCallback(teleportHandler)
#接続
client.Network.Login(firstName, lastName, passWord, '', '')
#実際の処理(テレポートと現在位置の取得)
#(1)SIM名とSIM内の位置を指定してテレポートする
time.sleep(10)
simName = 'Karuizawa'
pos = libsecondlife.LLVector3(145, 250, 22)
client.Self.Teleport(simName, pos)
#現在位置の表示
time.sleep(10)
printCurrentLocation()
#(2)ランドマークのUUIDを指定しててレポートする
time.sleep(10)
lmUuid = libsecondlife.LLUUID('51daae92-4279-3530-82a6-349fe31a87bb')
client.Self.Teleport(lmUuid)
#現在位置の表示
time.sleep(10)
printCurrentLocation()
#切断
client.Network.Logout()
グループを作ってばかりいると金がかかる
TestClientにvoice 関連のコマンドが追加された
CookComputing.XmlRpcV2 のエラーの時
灰色のハーレム
SLアイテム検索ページ仮実装しました
libsecondlifeサンプル - 画像の取得
TestClientにvoice 関連のコマンドが追加された
CookComputing.XmlRpcV2 のエラーの時
灰色のハーレム
SLアイテム検索ページ仮実装しました
libsecondlifeサンプル - 画像の取得
Posted by march at 12:53│Comments(0)
│libsecondlife