> HOME
早くも引越し?!
2012年06月08日
さて、このブログは開設してまだ間もないというのに、早くも引越しという運びになりました。
理由は皆さんご想像のとおり、無料ブログの商用利用違反疑惑です。
スクリプトの話をいろいろ書きたいわけですが、どうしても商品の話になったり、お店のデモで試せるよとか、商売へ誘導するような、ふくよかな匂いが漂うわけですよね。
だけどそういう匂いを一切排除するとなると、せっかく読んでいただいたお客さんに対して、肝心のところの説明がなかったり、どこで見れるか試せるかがわからないという、不親切になってしまいます。
そういうわけで、そんな不便のない別のブログに引越すことにしました。
新しいブログは、内容と関係ない広告がでてこないという利点もあって、とても快適です。
ここで新ブログへのリンクを書くと、また商用ブログへの誘導疑惑が発生するので、ここにリンクは書きませんが、本文ではなく、サイドバーのお気に入りにあるリンクは商用利用の例外らしいので、参考にしてみてください。
それでは皆様、またSL内のどこかで、または新しいブログでお会いいたしましょう。ごきげんよう。
理由は皆さんご想像のとおり、無料ブログの商用利用違反疑惑です。
スクリプトの話をいろいろ書きたいわけですが、どうしても商品の話になったり、お店のデモで試せるよとか、商売へ誘導するような、ふくよかな匂いが漂うわけですよね。
だけどそういう匂いを一切排除するとなると、せっかく読んでいただいたお客さんに対して、肝心のところの説明がなかったり、どこで見れるか試せるかがわからないという、不親切になってしまいます。
そういうわけで、そんな不便のない別のブログに引越すことにしました。
新しいブログは、内容と関係ない広告がでてこないという利点もあって、とても快適です。
ここで新ブログへのリンクを書くと、また商用ブログへの誘導疑惑が発生するので、ここにリンクは書きませんが、本文ではなく、サイドバーのお気に入りにあるリンクは商用利用の例外らしいので、参考にしてみてください。
それでは皆様、またSL内のどこかで、または新しいブログでお会いいたしましょう。ごきげんよう。
Posted by lovemax at
19:03
飛行船でデモ飛行
2012年06月07日
お店に展示してある飛行船は「デモ飛行」ができます。
店が狭いので、半分に切ってありますが、性能にかわりはありません。
動かすには、船のどこかに座ってから、船体にタッチします。
操縦には、キーボードの矢印キー(前後左右)と PageUp・PageDownキー(上下)を使います。
止まるには、もういちどタッチするか、立ち上ってください。
あと、デモ飛行船は、もとの場所にもどさなくても大丈夫です。
乗客が降りると、勝手に消えるし、元の場所には新しい展示用の飛行船が出るようになってます。
スクリプトでは、飛行船オブジェクトを「乗り物」に設定し、それっぽい動きをするいろいろな設定をします。
細かいところは全部すっとばして、操縦のとこだけ一部を書くと…
矢印キーはふだん歩いたり飛行したりに使ってるので、これを飛行船操縦用に切り変えます。
// ------------
default {
touch_start(integer total_number) { // タッチで矢印キーのコントロールを取る許可を依頼
llRequestPermissions(llDetectedKey(0), PERMISSION_TAKE_CONTROLS);
}
run_time_permissions(integer perm) {
if ( perm ) { // 許可を得てそれぞれ矢印キーのコントロールを取る
llTakeControls(CONTROL_FWD | CONTROL_RIGHT | // 「↑」「→」(以下省略)
}
}
control(key id, integer level, integer edge) { // 矢印キーを押したり離したりした時
if(level & ~edge & CONTROL_FWD) { // 「↑」キーを押してるとき
if( LinearMotor.x < 50 ) LinearMotor.x += 10; // 前進
LinearMotor.z = 0;
}
if(level & ~edge & CONTROL_RIGHT) { // 「→」キーを押してるとき
if ( AngularMotor.x < 2.5 ) AngularMotor.x += 0.5; // 右へ傾ける
if ( -5 < AngularMotor.z ) AngularMotor.z -= 1; // 右回り回転
}
// (ほかは省略)
fly( LinearMotor, AngularMotor);
}
}
fly( vector linear_motor, vector angular_motor) { // 飛行船を動かす
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, linear_motor );
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor );
}
// ------------
…こんな感じです。
参考:乗り物制作のチュートリアル
http://wiki.secondlife.com/wiki/Linden_Vehicle_Tutorial/ja
築地で見かけたら、ぜひ乗り心地を試してみてください。
店が狭いので、半分に切ってありますが、性能にかわりはありません。
動かすには、船のどこかに座ってから、船体にタッチします。
操縦には、キーボードの矢印キー(前後左右)と PageUp・PageDownキー(上下)を使います。
止まるには、もういちどタッチするか、立ち上ってください。
あと、デモ飛行船は、もとの場所にもどさなくても大丈夫です。
乗客が降りると、勝手に消えるし、元の場所には新しい展示用の飛行船が出るようになってます。
スクリプトでは、飛行船オブジェクトを「乗り物」に設定し、それっぽい動きをするいろいろな設定をします。
細かいところは全部すっとばして、操縦のとこだけ一部を書くと…
矢印キーはふだん歩いたり飛行したりに使ってるので、これを飛行船操縦用に切り変えます。
// ------------
default {
touch_start(integer total_number) { // タッチで矢印キーのコントロールを取る許可を依頼
llRequestPermissions(llDetectedKey(0), PERMISSION_TAKE_CONTROLS);
}
run_time_permissions(integer perm) {
if ( perm ) { // 許可を得てそれぞれ矢印キーのコントロールを取る
llTakeControls(CONTROL_FWD | CONTROL_RIGHT | // 「↑」「→」(以下省略)
}
}
control(key id, integer level, integer edge) { // 矢印キーを押したり離したりした時
if(level & ~edge & CONTROL_FWD) { // 「↑」キーを押してるとき
if( LinearMotor.x < 50 ) LinearMotor.x += 10; // 前進
LinearMotor.z = 0;
}
if(level & ~edge & CONTROL_RIGHT) { // 「→」キーを押してるとき
if ( AngularMotor.x < 2.5 ) AngularMotor.x += 0.5; // 右へ傾ける
if ( -5 < AngularMotor.z ) AngularMotor.z -= 1; // 右回り回転
}
// (ほかは省略)
fly( LinearMotor, AngularMotor);
}
}
fly( vector linear_motor, vector angular_motor) { // 飛行船を動かす
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, linear_motor );
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor );
}
// ------------
…こんな感じです。
参考:乗り物制作のチュートリアル
http://wiki.secondlife.com/wiki/Linden_Vehicle_Tutorial/ja
築地で見かけたら、ぜひ乗り心地を試してみてください。
Posted by lovemax at
12:39
ノートもらえます
2012年06月06日
お店で売ってる商品で下のような表示のある箱からは、ノートももらえます。
右クリックででるメニューの「Get Note」を選ぶとノートカードが来ます。
説明や使い方が書いてありますので、参考にしてください。
このスクリプトは商品と一緒に入っていて、お店でお買いあげいただいたお客様には、おまけとして差し上げてます。内容は、
// ------------
string Note = ""; // ノートカードの名前
default {
state_entry() {
Note = llGetInventoryName(INVENTORY_NOTECARD, 0); // まずノートの名前を調べる
if (Note) llSetTouchText("Get Note");
// ノートがあれば右クリックメニューの「タッチ」を「Get Note」に変える
else llSetTouchText(""); // なければもとに戻す
}
touch_start(integer total_number) {
if (Note) llGiveInventory(llDetectedKey(0), Note); // 誰かがタッチしたらノートを渡す
}
changed(integer change) {
if(change & CHANGED_INVENTORY) llResetScript(); // 中身が変わったら最初から
}
}
// ------------
右クリックででるメニューの「Get Note」を選ぶとノートカードが来ます。
説明や使い方が書いてありますので、参考にしてください。
このスクリプトは商品と一緒に入っていて、お店でお買いあげいただいたお客様には、おまけとして差し上げてます。内容は、
// ------------
string Note = ""; // ノートカードの名前
default {
state_entry() {
Note = llGetInventoryName(INVENTORY_NOTECARD, 0); // まずノートの名前を調べる
if (Note) llSetTouchText("Get Note");
// ノートがあれば右クリックメニューの「タッチ」を「Get Note」に変える
else llSetTouchText(""); // なければもとに戻す
}
touch_start(integer total_number) {
if (Note) llGiveInventory(llDetectedKey(0), Note); // 誰かがタッチしたらノートを渡す
}
changed(integer change) {
if(change & CHANGED_INVENTORY) llResetScript(); // 中身が変わったら最初から
}
}
// ------------
Posted by lovemax at
17:30
テレポート
2012年06月05日
上空にはアダルトショップもあって、地上のお店の端っこにあるテレポーター(デモ商品)を使って行けます。
タッチするとメニューが出て行先を選べ、うにうにと出現する怪しげな物体に座ると、それが目的地まで運んでくれるしかけです。
目的地まで運ぶしくみは、スクリプトの中で、プリムのパラメーター設定をする llSetPrimitiveParams() を使っています。
人が座っているオブジェクトを移動させるためで、位置設定の llSetPos(<x,y,z>) と同じことをするため、llSetPrimitiveParams([PRIM_POSITION,<x,y,z>])というふうに書きます。
なぜこちらを使うかというと、llSetPos() で動ける距離が10mしかなく、遠くに行くためには何度も繰り返さないといけないのですが、繰り返すたびに0.2秒休憩してしまうので、時間もかかり、テレポという感じじゃなくなります。
このことは llSetPrimitiveParams() でも同じなのですが、裏技があって、[PRIM_POSITION, <x,y,z>, PRIM_POSITION, <x,y,z>,...]というふうに同じことを繰り返して書いておけば、(10mづつ)何度動いても休憩は1回だけ、なので一瞬で行ったようになります。
そこで、行先までの距離を10mで割って、何回繰り返すか調べ、その回数分の長~いリスト[PRIM_POSITION, <x,y,z>, PRIM_POSITION, <x,y,z>,...]を作って、それで llSetPrimitiveParams() を呼び出すわけです。
スクリプトで書くと、こうなります。
// ------------
jumpPos(vector pos) { // posは目的地の<x,y,z>
list rules = [];
integer n = (integer)(llVecDist(pos, llGetPos()) / 10.0) + 1;
for ( ; 0<n; --n ) rules += [ PRIM_POSITION, pos ];
llSetPrimitiveParams(rules);
}
// ------------
llSetPrimitiveParams()の詳しい説明はこちら
http://wiki.secondlife.com/wiki/LlSetPrimitiveParams/ja
タッチするとメニューが出て行先を選べ、うにうにと出現する怪しげな物体に座ると、それが目的地まで運んでくれるしかけです。
目的地まで運ぶしくみは、スクリプトの中で、プリムのパラメーター設定をする llSetPrimitiveParams() を使っています。
人が座っているオブジェクトを移動させるためで、位置設定の llSetPos(<x,y,z>) と同じことをするため、llSetPrimitiveParams([PRIM_POSITION,<x,y,z>])というふうに書きます。
なぜこちらを使うかというと、llSetPos() で動ける距離が10mしかなく、遠くに行くためには何度も繰り返さないといけないのですが、繰り返すたびに0.2秒休憩してしまうので、時間もかかり、テレポという感じじゃなくなります。
このことは llSetPrimitiveParams() でも同じなのですが、裏技があって、[PRIM_POSITION, <x,y,z>, PRIM_POSITION, <x,y,z>,...]というふうに同じことを繰り返して書いておけば、(10mづつ)何度動いても休憩は1回だけ、なので一瞬で行ったようになります。
そこで、行先までの距離を10mで割って、何回繰り返すか調べ、その回数分の長~いリスト[PRIM_POSITION, <x,y,z>, PRIM_POSITION, <x,y,z>,...]を作って、それで llSetPrimitiveParams() を呼び出すわけです。
スクリプトで書くと、こうなります。
// ------------
jumpPos(vector pos) { // posは目的地の<x,y,z>
list rules = [];
integer n = (integer)(llVecDist(pos, llGetPos()) / 10.0) + 1;
for ( ; 0<n; --n ) rules += [ PRIM_POSITION, pos ];
llSetPrimitiveParams(rules);
}
// ------------
llSetPrimitiveParams()の詳しい説明はこちら
http://wiki.secondlife.com/wiki/LlSetPrimitiveParams/ja
Posted by lovemax at
16:56