セカンドライフプラネット

セカンドライフのスクリプト言語(LSL)をプラネットします。3DCG で物体をプラネットしたりもします。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

スクリプトの修正(ロケット推進力)

推進力を弱くしたロケット(青ロケット)を、豊島区(toshimaku)でお配りしています。スクリプトをいろいろといじって遊んでみてください。楽しいですよ。

元のロケット(赤ロケット)は、推進力が大きく(15)アッという間に視界から消えてしまいます。

ロケットが上昇していくところをもっとゆっくり見たいので、青ロケットは推進力を小さく(3)しました。


セカンドライフ スクリプト ロケット



ロケットを推進させるには、llSetForce 関数を使用します。

LlSerForce 関数は、Second Life Wiki で詳しく説明されています。
http://rpgstats.com/wiki/index.php?title=LlSetForce

力には2種類あります。
●永続的な力
llSetForce 関数は、重力やロケット推進力のように永続的な力の場合に使用します。
●瞬間的な力
ボールをキックしたりバッティングしたりする衝撃力など瞬間的な力の場合には、llApplyImpulse 関数を使用します。

ロケットを回転させながら推進させるなど、トルクを伴う力の場合には、llSerForceAndTorque 関数を使用します。


   llSetForce(vector  force,  integer  local);

llSetForce 関数には2つのパラメーターがあります。
●第1パラメーター(ベクトル型:vector
物体に加わる力の大きさと方向を指定します。

例: <0, 0, 10> // Z 軸方向に10 の力を加える

●第2パラメーター(整数型:integer
TRUE とFALSE の2通りの指定があります。第1パラメーター(力)を表現する座標系が、
ローカル座標系(オブジェクト座標系)の場合は「TRUE」で、グローバル座標系(SIM 座標系)の場合は「FALSE」と指定します。

ロケット推進力は「TRUE」で、重力の場合は「FALSE」と指定します。

1.準備
llSetForce 関数などを使用する場合、物体に物理法則が適用できるようにする必要があります。
具体的には、以下の関数を使用します。

llSetStatus(STATUS_PHYSICS, TRUE);

2.ロケットでの使用例
オブジェクトには質量があり、llGetMass 関数で計算可能です。そのため、ロケットの場合も、ロケットを打ち上げるのに必要な力を計算で正確に求めることができます。


しかし、セカンドライフでは、ロケット実験が簡単にできるので、パラメーターを適当に数値入力して試行錯誤すればよいかと思います。

例1.llSetForce(<0,0,2.5>, TRUE);
ロケットは打ち上がりません。風にゆられてユラユラします。

例2.llSetForce(<0,0,3.0>, TRUE);
辛うじて、打ちあがります。見ていて楽しいです。

例3.llSetForce(<0,0,3.5>, TRUE);
全然普通に打ちあがります。

3.青ロケットのスクリプト
ロケットの推進力は、「THRUST」という名の変数を使用しています。実験する際には、THRUST の値をいろいろと変えてみてください。
------------------------------------------------------
float  gTotalTime = 0.0;
float  gTimeStep = 0.2;


float  FLIGHT_TIME = 5.0;
float  WAIT_TIME = 5.0;
float  THRUST = 3.0; // 2.5 or 3.0 or 3.5


integer  launched = FALSE;


launch()
{
    launched = TRUE;
    gTotalTime = 0.0;
    llSetStatus(STATUS_PHYSICS, TRUE);
    llSetForce(<0,0,THRUST>, TRUE);
    llSetTimerEvent(gTimeStep);
    llTriggerSound("launch", 1.0);
    llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "smoke", ZERO_VECTOR);
}
default
{
    state_entry()
    {
        llPreloadSound("launch");
        llPreloadSound("explosion");
        llSetStatus(STATUS_PHYSICS, FALSE);        
    }
    touch_start(integer num)
    {
        llSay(0, "Launching, please wait!");
        llSetTimerEvent(WAIT_TIME);
    }
    timer()
    {
        if (!launched)
        {
            launch();
            return;   
        }
        gTotalTime += gTimeStep;
        if (gTotalTime < FLIGHT_TIME)
        {
            llMakeExplosion(5, 1.0, 2, 3.0, PI, "smoke", ZERO_VECTOR);
        }
        else
        {
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSetForce(<0,0,0>, TRUE);
            llTriggerSound("explosion", 10.0);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "green", ZERO_VECTOR);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "blue", ZERO_VECTOR);
            llDie();
        }       
    }
    collision_start(integer num)
    {
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSetForce(<0,0,0>, TRUE);
            llTriggerSound("explosion", 10.0);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "green", ZERO_VECTOR);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "blue", ZERO_VECTOR);
            llDie();
    }
}
------------------------------------------------------

スポンサーサイト

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/01(日) 21:14:20|
  2. LSL超初心者講座
  3. | トラックバック:0
  4. | コメント:1

ロケットを横撃ち可能に改造

ライブラリーにあるロケットのスクリプトを改造しました。ロケットのスクリプトは短いですが、きれいに作られていて、スクリプトの教科書のようです。

プログラム言語一般にいえることですが、特にスクリプトの場合、一からスクリプトを作るよりも既に動いているスクリプトを改造する方がはるかに簡単です。スクリプトの勉強にもなります。

ロケットはランチャー(発射台)から呼び出され(レズされ)強制的に垂直方向に設置されます。そのため、ロケットを垂直方向以外の方向に撃つことができません。

ロケットを横撃ち可能にするため、まず、ロケットをランチャーから取り外します。そのままでは、ロケット単体では動かせないので、ロケットのスクリプトを改造して、ロケット単体で動かせるように改造します。

(1)ライブラリーからランチャーを取り出す
プレイ画面の右下にある「在庫目録」をクリックすると在庫目録が出てきます。木構造になっていますが、折りたたむと個人目録である「My Inventory」とライブラリー「Library」とになります。


セカンドライフ スクリプト Inventory Library


ライブラリーにあるランチャーがあることを確認します。
「Library」-「Objects」-「Firework Launcher」


セカンドライフ スクリプト Library


ランチャーをを地面にドラッグ&ドロップします。

(2)ランチャーの「内容」タグの表示
取り出したランチャーを「右クリック」しパイメニューから「編集」をクリックし「建造ウィンドウ」を表示します。「建造ウィンドウ」には5個のタブがあります。その中の「内容」タブをクリックします。タブが見えない場合、「簡易」表示となっているので、「建造ウィンドウ」の右下にある「全表示>>」ボタンをクリックします。


セカンドライフ スクリプト Launcher


ランチャーの中にロケット(Rocket)オブジェクトがあることが分かります。



(3)ロケットの取り出し
「建造ウィンドウ」の「内容」タブにある「Rocket」アイコンを地面にドラッグ&ドロップして取り出します。


セカンドライフ スクリプト ロケット Rocket


ロケットを取り出すと、「建造ウィンドウ」の内容もロケットの内容に変わります。ロケットの内容を以下となっています。

・スクリプトファイル
      Rocket Booster
・画像ファイル
      blue, green, smoke
・音響ファイル
      explosion, launch

ランチャーを右クリックしパイメニューから「削除」を選び、ランチャーを削除してください。


(4)ロケットのスクリプト編集
「建造ウィンドウ」にあるスクリプト(Rocket Booster)をダブルクリックしスクリプトエディターを表示します。


セカンドライフ スクリプト Rocket Booster


スクリプトの中から,on_rez イベントとtouch_start イベントを探してください。その2つのイベントに追加修正を加えます。

編集1
: on_rez イベントを無効にする
on_rez イベントをコメントアウト(// 追加)します。 以下のように,各行の先頭に「//」を追加してください。

//    on_rez(integer param)
//    {
//        if (param > 0)
//        {
//            llSetTimerEvent((float)param);
//        }
//    }   

編集2: touch_start イベントでタイマーを設定
llSetTimerEvent 関数を追加する。パラメータの5.0 はアバターがロケットをタッチしてからロケットが発射するまでの時間です。5秒後に発射する設定です。

    touch_start(integer num)
    {
        llSay(0, "Launching, please wait!");
        llSetTimerEvent(5.0);  // 追加
    }

保存: 編集結果を保存するため、スクリプトエディターの右下にある「保存」ボタンをクリックします。エラーがなければ、「Save complete.」の表示があり、保存完了です。

「建造ウィンドウ」を閉じます。


(5)ロケットを「Take」する
このまま、ロケットにタッチすると撃ち上がって消滅してしまいます。そうならないように、ロケットを右クリックしパイメニューから「Take」を選びます。改造したロケットが在庫目録の「My Inventory」-「Objects」の中にあることを確認します。


セカンドライフ スクリプト ロケット Rocket


(6)ロケットの撃ち上げ
在庫目録から「Rocket」を出してください。その後は「建造ウィンドウ」でロケットの向きなどを調整します。ロケットをタッチすると数秒後にロケットが発射します。


セカンドライフ スクリプト ロケット Rocket


元々のスクリプトに、何かに衝突した場合の処理(ロケット消滅)が組み込み済みです。なので大丈夫ですが、「人」や「建物」に向けて横撃ちしてると怒られるので注意してくださいね。

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/06/20(水) 11:55:03|
  2. LSL超初心者講座
  3. | トラックバック:0
  4. | コメント:0

プロフィール

Aa

Author:Aa
SLプラネットへようこそ!
Koenjiで物づくりしてます。
皆さん、遊びにきてください。

ショップのSLURL

ショップ(白屋)のSLURLです。メタバーズの高円寺にあります。商品を展示販売しています。

メタバーズ、高円寺、白屋

最近の記事

月別アーカイブ

カテゴリー

ブログ内検索

おすすめ商品!


パソコンの横において、疑問点をサッと調べられます!...



オブジェクト制作を基礎から解説!販売方法も詳しく記述!...



すぐに使えるサンプルプログラムを多数収録!...



関数の詳しい記述あり!辞書のように便利!...

ゲームPC

ゲーム用パソコンならドスパラへ!Galleriaシリーズが大人気!

リンク

このブログをリンクに追加する

スポンサードリンク

スポンサードリンク

最近のコメント

最近のトラックバック

RSSフィード

FC2カウンター

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。