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

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

スポンサーサイト

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

スクリプト超初心者講座(制御構造4)

制御構造の途中ですが、ここで演算子についてまとめておきます。既出のものが多数なのですが、ちょっとゴチャゴチャしてきたので整理しておきます。

●算術演算子
プラス(+):
2つの数値を加算する。 例: 10 + 20
2つの文字列を結合する。例: "Second"  +  "Life"

マイナス(-):
2つの数値を減算する。 例: 10 - 20

アスタリスク(*):
2つの数値を乗算する。 例: 10 * 20

スラッシュ( / ):
2つの数値を除算する。 例: 10 / 20


●代入演算子
イコール(=):
左辺の変数に右辺の数値を代入する。 例: a = 10;
左辺の変数に右辺の変数の内容(値)をコピーする。 例: a = b;

例:変数a に変数b の値に1足したものを代入する。
 a = b + 10;


●インクリメント・デクリメント
プラスプラス(++):
代入演算子の使用方法で、「変数に1を足す」といった特別な場合に++演算子を使用します。

例: a++;
これは、a = a + 1; と同じ意味です

マイナスマイナス(--):
代入演算子の使用方法で、「変数から1を引く」といった特別な場合に--演算子を使用します。

例: a--;
これは、a = a - 1; と同じ意味です


●関係演算子
関係演算子はif文の条件部分などで使用されます。

イコールイコール(==):
左右の値(もしくは変数の値)が等しい場合は真(1)となり、等しくない場合は偽(0)となります。

以下に例を示します。

default ()
{
   touch_start (integer num)
   {
      integer a = 0;
      if (a == 10)
      {
         llSay(0, "True.");
      }
      else
      {
         llSay(0, "FALSE");
      }
   }
}

上記プログラムを動かすと、「FALSE」とチャットします。

アバターが箱をタッチすると、
・まず変数a を整数型で宣言し、a に数値の0 を代入します。
・そして、if 文の条件部分において左辺の変数a の値(0)と10 が等しいか見ます。
・・等しくないので偽となり、else部分のブロックを実行します。

◇確認:
上記プログラムをコンパイル・実行してみてください。
上記プログラムで変数a に10 を代入してコンパイル・実行してみてください。

ノットイコール(!=):
左右の値(もくしは変数の値)が等しい場合は偽(0)となり、等しくない場合は真(1)となります。
==演算子と逆の結果となります。
 例: if (a != 10)

◇確認:
上記プログラムの「==」を「!=」に変更してコンパイル・実行してみてください。

小なり(<):
左辺の値が右辺の値より小さい場合は真(1)となり、大きいか等しい場合は偽(0)となります。
 例: if (a < 10)

小なりイコール(<=):
左辺の値が右辺の値より小さいか等しい場合は真(1)となり、大きい場合は偽(0)となります。
 例: if (a <= 10)

大なり(>):
左辺の値が右辺の値より大きい場合は真(1)となり、小さいか等しい場合は偽(0)となります。
 例: if (a > 10)

大なりイコール(>=):
左辺の値が右辺の値より大きいか等しい場合は真(1)となり、小さい場合は偽(0)となります。
 例: if (a >= 10)


●論理演算子
if 文などで複雑な条件を扱う場合に論理演算子を使用します。

アンド(&&):
2つの条件を同時に満たす場合に真となり、そうではない場合に偽となります。

例: if (a == 10  &&  b == 20)
変数a の値が10 、かつ変数b の値が20 の場合に真となり、それ以外の場合は偽。

オア(||):
2つの条件のどちらかを満たす場合に真となり、そうではない場合に偽となります。

例: if (a == 10  ||  b == 20)
変数a の値が10 、もしくは変数b の値が20の場合に真となり、それ以外の場合は偽。


課題
よくやる間違いをシミュレーションしてみます。

関係演算子の「==」に少し違和感を覚えたかと思います。と言うのも、関係演算子の「==」に相当するものを数学では「=」と書いていました。

数学では「=」は「右辺と左辺が等しい」場合の記号として使用してきました。
・・・数学:      = 記号
・・・プログラム:  == 記号

結論から言うと、プログラムでは「=」記号を代入演算子として使っているので、数学での等しいという意味の記号をプログラムでは「==」記号を使用します。

そのため、「=」と「==」の勘違いに起因するバグが発生します。

・・・以下のプログラムをコンパイル・実行してみてください。バグ入りです^^

default ()
{
   touch_start (integer num)
   {
      integer a = 0;
      if (a = 10)
      {
         llSay(0, "True.");
      }
      else
      {
         llSay(0, "FALSE");
      }
   }
}


正常にコンパイルされ、実行時エラーもありません。ただ動きがおかしいですね。

本来、FALSE とチャットされるのが、TRUE とチャットされています。これがロジックのエラーです。

コンパイル・実行されるプログラムは文法的には正しいプログラムです。ただ、今回のように論理的に間違っていることがあります。このことをロジックエラーとか論理エラーとよびます。正真正銘のエラーです^^

プログラムにバグがあります。どこだか分かりますか?

答えは、if 文の条件部です。a == 10 とするところを、a = 10 としています。

「a = 10」は、変数a に10 を代入せよという命令です。変数a は整数型ですし、10 も整数です。そのため、「a = 10」命令は成立し真(1)となります。

すなわち、if 文の条件部に「a = 10」のような代入文を使用すると常に成立することとなりロジックエラーとなります。

バグを修正してコンパイル・実行してみてください。

スポンサーサイト

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

  1. 2007/11/29(木) 16:52:27|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

パーティクルの新作(パーティクル看板)

パーティクルプロトタイプの新作(パーティクル看板)を作りました。

例:LSL Tips講座のパーティクル看板
セカンドライフ スクリプト パーティクル 看板


看板をパーティクルで作ると「面白い看板」になります。

パーティクルの性質で、パーティクルは常にアバターの方を向きます。そのため、常に自分に向いている看板を作ることができます。

パーティクルのサイズは最大横4m×縦4mなので、看板サイズの最大値も同じ値となります。

サイズ(Size)はパーティクル発生時(Start)と消滅時(End)に指定します。

例えば、startSize を <4.0, 4.0, 0.0> と指定します。

startSize はベクトルですが、Z成分が0 なのは、パーティクルが常にアバターの方(ビューワー)を向いているためです。

●展示
以下の場所で展示しています。
・ToshimaKuの白屋(SIROYA)
http://slurl.com/secondlife/ToshimaKu/153/175/22

●Particle Prototype ベンダー
展示の「パーティクル看板」の後方にベンダーがあります(空色の☆マーク)。
(Particle Drive HUD ユーザーの方のみ使用可)

Particle Prototype 形式で無償配布しています。
・・・Particle Prototype (Billboard)

Particle Drive HUD ユーザーは以下の手順で入手してください。
(1)Particle Drive HUD を装着する
(2)Particle Prototype ベンダー(☆マーク)をクリックする
(3)30秒以内にParticle Drive HUD の☆マークをクリックする

Particle Prototype (Billboard) を装着し、オーナー認証するとそのままで使用できます。 ただ、看板の内容を変える必要がありますので、その方法を以下で説明します。

●テクスチャーの入れ替え
Particle Prototype のデーター部分であるParticle Information をエディターで修正します。また、最終アウトプットであるLSL形式を直接修正することも可能です。その場合でも、以下で説明する方法を参考にしてください。

【取扱説明書の関連項目も同時に参照してください】

【方法1】コンテンツにテクスチャー画像を入れる
・装着しているParticle Prototype (Billboard) を右クリックし「編集」を選択します。
・建造ウィンドウの「コンテンツ」タブを選択します。
・コンテンツに看板テクスチャー(図ではImage)をドラッグ&ドロップします(下図参照)。
・同じ所にあるノートカードParticle Information (Billboard)をダブルクリックします。
・texture項目にimageと記述し保存します。
・Particle Drive HUD で「Reload」を実行します。

secondlife script particle billboard

(注1)この方法の場合、看板プリムのコンテンツにもテクスチャー(今の例では、Image)を入れてください。

【方法2】コンテンツにテクスチャー画像を入れない
コンテンツにテクスチャー画像を入れる場合、テクスチャー画像をコピーすることができます。テクスチャー画像をコピーされたくない場合は、テクスチャーのUUID を使用する方法があります。

・Inventory から看板となるテクスチャーを右クリックし、
 「資産UUIDをコピー」を選びます(下図参照)。
・装着しているParticle Prototype (Billboard) を右クリックし「編集」を選択します。
・建造ウィンドウの「コンテンツ」タブを選択します。
・そこにあるノートカードParticle Information (Billboard)をダブルクリックします。
・texture項目にUUID をペーストし(キーボードからCtrl+V と入力)、保存します。
・Particle Drive HUD で「Reload」を実行します。

secondlife script particle billboard

(注1)この方法の場合、看板プリムのコンテンツにテクスチャーを入れる必要はありません。

●実験・調整
看板として成立するために、風の影響を受けないとかチラチラしないとか文字が流れないとかに注意してパラメーターを調整します。SIM が重くならないことも考慮する必要もあります。

主観的な要素が入ってくるので、パーティクル看板のパラメーター調整は少々難しいです。

配付しているParticle Prototype (Billboard) はAa が調整した数値が入っていますので、そのまま使用していただいて大丈夫です。

ただ、まだまだ調整できそうなので、ぜひ、パラメーターを調整してみてください。きっと、よりよい数値が見つかると思います。

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

  1. 2007/11/26(月) 16:46:46|
  2. パーティクルドライブ
  3. | トラックバック:0
  4. | コメント:1

週刊懸賞生活に掲載決定!

「週刊懸賞生活」の第17号(11月25日発行)で、Particle Drive HUD を掲載していただけることになりました!

Particle Drive HUD はオリジナルパーティクルを制作する装置です。そのため、クリエイターさん向けのツール商品なのですが、関心を持って掲載を快諾していただいたdanbo さんに大変感謝しております。

セカンドライフ 懸賞生活 パーティクル


抽選で1名様にプレゼントです。

●Particle Drive HUD の特徴
(1)どこでも使用できます
HUD(Head Up Display)に装着するので作業場所を選びません。
キャンプしながら作業できます。
(2)初心者でも大丈夫
すぐに使えるパーティクルのヒナ型を10種類用意しました。パーティクルのヒナ型を少しアレンジするだけで自分オリジナルのパーティクルが作れます。パーティクルのヒナ型は今後種類を増やしていきます(0L$配布)。
(3)上級者対応
Particle 関数の全パラメーターに対応しています。SL内でのあらゆるパーティクルを作成できます。面倒なコンパイル作業が不要で、リアルタイムにパラメーター修正できます。
(4)充実したユーザーフォロー
スクリプト初心者対象に「スクリプトTips講習会」を開講(0L$)しています。商品へパーティクルを組み込む方法が分かります。Particle Drive HUD 専門の講座も開講(有償)しています。
また、ブログでParticle Drive HUD の具体的な使用方法を紹介しています。その際、パーティクルのヒナ型を順次発表し無償で配布しています。

●Particle Drive HUD (YouTube動画)
ビューワー左上にパーティクルドライプHUDを装着しています。

 

Particle Drive HUD の詳細につきましては、
本ブログのカテゴリー(パーティクルドライブ)をご参照ください。
http://gameworkshop.blog106.fc2.com/category8-2.html

●展示販売
MagSL - Tokyo2 - ToshimaKu の中央にあるSIROYA(レンガ壁)にてParticle Drive HUD 本体を展示販売しています。 本来はHUD(Head Up Display)に装着するものですが、外に出して展示しています。
http://slurl.com/secondlife/ToshimaKu/153/175/22

同時に、本装置で作成したパーティクル例を展示しています。屋外には大型パーティクル(雲、雨、爆発、など)、屋内には小型パーティクル(宝石、火炎、看板、など)を展示しています。

また、本ツールを使いこなすための「ラーニング付きParticle Drive HUD」も同時販売しています。
(注)ラーニングはeラーニングではなく、SIM 内での実地講習です。

●「週刊懸賞生活」マガジン
「週刊懸賞生活」マガジンはお近くの配付スタンドをクリックすることで入手できます。

SL Game Forum にも配付スタンドがありますのでご利用ください。
http://slurl.com/secondlife/Game%20Forum/146/123/22

セカンドライフ 懸賞生活 配付スタンド

「週刊懸賞生活」への申込方法等は、
「セカンドライフ(Second Life)の懸賞生活日記」をご覧ください。
http://ameblo.jp/secondlife-kensho/

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

  1. 2007/11/23(金) 15:18:53|
  2. パーティクルドライブ
  3. | トラックバック:0
  4. | コメント:0

SLCOM Game Forum 店

SLCOM Game Forum 店がオープンしました。

セカンドライフ ショップ SLCOM

クリエイターさんの力作が揃っています。SIM にお越しの際はぜひお寄りください。

SL Game Forum の中央にあります。
http://slurl.com/secondlife/Game%20Forum/146/123/22


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

  1. 2007/11/22(木) 18:29:24|
  2. 空中工房
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(制御構造3)

今回は前回の続きとして、フローチャートを用いて分岐処理を詳しく見ていきます。

前回のおさらいとして、一番簡単な分岐処理を見てみます。

●一番簡単な分岐処理
一番簡単な分岐処理をフローチャートにすると下図でした。

secondlife script flowchart
また、これをLSL で記述すると、以下となりました。

if (条件)
{
   処理
}

条件を満たした場合「Yes」は「処理」を行い、そうではない場合「No」は何もしません。
これが一番簡単な分岐処理でした。

それでは、二番目に簡単な分岐処理はどうなるでしょうか?

●二番目に簡単な分岐処理
二番目に簡単な分岐処理をフローチャートにすると下図となります。

secondlife script if else

これをLSL で記述すると、以下となります。

if (条件)
{
   処理1
}
else
{
   処理2
}

条件を満たした場合「Yes」は「処理1」を行い、そうではない場合「No」は「処理2」を行います。

ここで、「else」という文が出てきました。「else」は「if」とペアで用いられ、条件が満たされない場合の処理を記述します。

一番簡単な分岐処理を「if-else」で記述することもできます。

if (条件)
{
   処理
}
else
{
}

これでも正常に動作しますが、elseブロックの中には何もないので、「else { } 」をバッサリとカットします。

●else if 文
それでは問題です。以下のフローチャートをLSL で表すとどうなるでしょうか?

secondlife script if elseif

以下が解答例です。

if (条件1)
{
   処理1
}
else
{
   if (条件2)
   {
      処理2
   }
   else
   {
     処理3
   }
}

これで全く問題ありませんが、else if 文を用いると以下となります。

if (条件1)
{
   処理1
}
else if (条件2)
{
   処理2
}
else
{
   処理3
}

2つのプログラムを見比べてみてください。違いは分かりますでしょうか?
一目見てインデントの違いが目立ちますが、それ以外での違いです。

答えは、else と if の間にある開中括弧 { の有る無しです。

すなわち、else if 文とはelse { ifを省略したものだと理解すればよいです。

言い換えると、elseブロックの最初にif文がある場合は、else if 文で省略できます。


実習1.
以下のプログラムを手入力し実行させてください。
・コピー&ペースト禁止(コピペすると分からなくなりますヨ)。
・キャンプのレートに関するプログラムです。
・10分換算で2L$以上もらえると「Good Camp」とチャットします。
・それ以外の場合は「No Good Camp」とチャットします。

default
{
   touch_start(integer num)
   {
      integer rate = 1;
      if (rate >= 2)
      {
         llSay(0, "Good Camp.");
      }
      else
      {
         llSay(0, "No Good Camp.");
       }
   }
}

ここで、条件文(rate >= 2)について簡単に説明します。>= は比較演算子と呼ばれているものです。左辺の変数rate の値が、右辺の数値2 より大きいかどうかを判断しています。

大きい場合「Yes」の処理、そうでない場合「No」の処理に分岐します。

比較演算子については次回移行で詳しく説明します。

・変数rate の数値をいろいろと変えて正常に動作するかテストしてください。
    rate = 1; の数値を、例えば0, 1, 2, 3, 4, 5 に変えて動かす
・上記プログラムをフローチャートにしてください。


実習2.
以下のプログラムを手入力し実行させてください。

default
{
   touch_start(integer num)
   {
      integer rate = 1;
      if (rate < 2)
      {
         llSay(0, "No Good Camp.");
      }
      else if (rate < 4)
      {
         llSay(0, "Good Camp.");
      }
      else
      {
         llSay(0, "Very Good Camp.");
      }
   }
}

・上記プログラムをフローチャートにしてください。
・プログラムの内容を文章にしてください(箇条書き)。
・変数rate の数値をいろいろと変えて動作テストしてください。
    rate = 1; の数値を、例えば0, 1, 2, 3, 4, 5 に変えて動かす

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

  1. 2007/11/22(木) 02:57:50|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(制御構造2)

前回はプログラムを図形化する方法(フロープリム)をお話ししました。制御構造の順次処理と分岐処理を図形化することでその概要を把握しました。

今回はプログラムを図化する方法(フローチャート)を説明します。フローチャートを用いることで、より詳細にプログラムを記述することができます。

LSL で使用する図記号(フローチャート記号)は長方形と菱形と丸の3種類です。
それぞれ、処理、分岐、イベントを表現します(下図、参照)。

セカンドライフ スクリプト フローチャート
処理と分岐に関しては、前回に図形記号(フロープリム)で説明しました。3D が2D になっただけで内容は同じです。

一般的フローチャートでは、○記号は結合子とよばれています。

今回、LSLをフローチャート化するため、○記号はイベントを表現することとしました。

LSL はイベント駆動型言語です。何らかの出来事(イベント)によりプログラムがスタートします。

例えば、箱プリムに以下のスクリプトが入っているとします。

default
{
  touch_start(integer touch_num)
  {
    llSay(0, "Hello");
  }
}

touch_start イベントは、アバターが箱プリムをクリックすることでスタートします。

アバターが箱プリムをクリックするイベント(出来事)をきっかけとして動き始めるイベントがtouch_start イベントです。

先ほどのプログラムをフローチャートにします。
secondlife script flowchart
●順次処理
フローチャートでは、各処理は上から下に順番に処理していきます。下から上へと処理が逆流することはありません。
セカンドライフ スクリプト フローチャート
上記フローチャートをLSL で記述すると以下となります。

c = a;
a = b;
b = c;

●分岐処理
何らかの条件により処理内容が変わる場合、分岐処理となります。条件を満たすときは「Yes」方向に行き、条件を満たさないときは「No」方向に行きます。分岐を表す図(ひし形)には必ず上から入り下か横に抜けます。

secondlife script flowchart

横から入るような書き方はお作法的に良くありません(×)。理由は見にくくなり誤解が生じるからです。

セカンドライフ スクリプト フローチャート
また、下に抜ける方を主流と考えて下方向を「Yes」にし、横方向を「No」にした方が見やすくはなります。しかし、下方向を「No」にしても問題ありません。

●一番簡単な分岐処理
一番簡単な分岐処理をフローチャートにすると以下となります。

secondlife script flowchart
分岐した「支流」は「本流」に戻します。
支流から本流にもどる際には矢印(←)を付けます。

上記フローチャートを、LSL で記述すると以下となります。

if (条件)
{
  処理
}

これが一番簡単な分岐処理です。
条件を満たした場合は「Yes」となり「処理」を行います。そうではない場合は何もしません。

実習1.
以下のフローチャートで表されるプログラムを入力し実行させてください。
・キャンプのレートに関するプログラムです。
・10分換算で2L$ より多くもらえると「Good Camp」とチャットします。
・動いたら、rate を1 に変えて動作させてみてください。

セカンドライフ スクリプト フローチャート

default
{
  touch_start(integer num)
  {
    integer rate = 3;
    if (rate > 2)
    {
        llSay(0, "Good Camp.");
    }
  }
}

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

  1. 2007/11/16(金) 02:22:31|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(制御構造)

前回までで変数は一応の終了です。今回から制御構造に入ります。

プログラムは個々の処理の集まりで、その集まりには前後関係があります。

例えば、まず整数型変数aを宣言(宣言処理)し、その次にaに値1を代入(代入処理)します。

宣言処理と代入処理の順序を逆にすることはできません(エラーになります)

このような処理と処理の結びつきを制御構造といいます。

制御構造は以下の3種類に大別できます。
●順次処理
●分岐処理
●繰返処理

制御構造は何らかの図化をすると分かりやすいです。
一般に、流れ図(フローチャート)とよばれる図化手法を用いますが、これについては次回以降にお話しさせていただきます。

今回はプリムを使用して制御構造を図形化してみました(流れ図形:フロープリム)。

●「Hello,Avatar」の図形化
お馴染みの以下のプログラムを図形化(プリム化)します。

default
{
  state_entry()
  {
  llSay(0,"Hello,Avatar!");
  }
  
  touch_start(integer total_number)
  {
   llSay(0,"Touched.");
  }
}

secondlife script flowchart

プログラムと流れ図形(フロープリム)を見比べてください。

●ステート

ステートは白いドーナツを薄くしたような形状で表現します。

●イベント
イベントは2つの赤球でつながった図形で表現します。
上のフロープリムを見ると、2つのイベントがあることが分かります。

●各処理

各処理は水色の立方体で表現します。

上の図形で、左側のイベントは、処理が一つなのでstate_entry イベントを表していることが分かります。。
・・・処理1:llSay(0, “Hello,Avatar!”);

一方、右側のイベントは、処理が二つなのでtouch_start イベントを表しています。
・・・処理1:integer  total_number;
・・・処理2:llSay(0, “Touched.”);


●順次処理
下の画像は、順次処理を図形化した部分です。
2つの処理を結ぶパイプに注目してください。このパイプの中を水が落ちると想像してください。

水の流れ方から、次の性質があることとします。
・・・水は上から下に流れる:まず、上の水色の箱(処理)を行い、次に下の箱(処理)を行う。
・・・水は下から上に流れない:逆流しない、すなわち下の箱を上の箱より先に処理することはない。

セカンドライフ スクリプト 制御構造

touch_start イベントを見ると、まず、整数型変数を宣言し、次にllSay 関数を用いています。このように個々の処理に順番を指定し、順番通り一つずつ実行していくことを順次処理といいます。

一つ一つ順番に処理していくので、「順次処理」といいます。

●一般的なLSLプログラムの図形化
一般的なLSLプログラムを図形化してみました。

secondlife script flowchart

2つのステートがあり、各ステートに2つのイベントがあることが分かります。
まだ説明していない黄色い図形があります。これは何でしょうか?

●分岐処理
黄色い図形は分岐処理を表します。

セカンドライフ スクリプト 制御構造

黄色い図形の上からパイプの中を流れてきた水は、条件により下に流れたり横に流れたりします。

流れが分岐するので「分岐処理」とよびます。

ここで注意点ですが、上からの水は100% 下か横かに流れていきます。下に60%、横に40% といった分岐ではありません。

残る「繰返処理」は次回以降に解説したいと思います。

LSLプログラムを図形化することは、プログラムの全体像を把握するのに役立ちます。

この図形は以下のSIM で公開していますので、見に来てください。
●SL Game Forum http://slurl.com/secondlife/Game%20Forum/61/52/36

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

  1. 2007/11/14(水) 04:24:47|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

新しいパーティクル(青宝石)

青い宝石の輝きを表現するパーティクルの作り方を説明します。

パーティクルは、LSL(Linden Script Language)のllParticleSystem関数を用います。

llParticleSystem関数は、関数の動きを指定するパラメーターが非常に多く、かつそれらが相互に関連していたりするので、何らかの支援システム(例えば、Particle Drive HUD)がないと使いこなすのは難しい関数です。

その反面、llParticleSystem関数の表現力は抜群で、宝飾品の輝きから雪や雲、火炎、水流などの表現に利用されています。また、群生する草花やサインシステムなどなどアイデア次第でいろいろな面白い使われ方をしています。

Particle Drive HUD
本装置は、ユーザーはllParticleSystem関数を意識することなくオリジナルなパーティクルを作成できる作りになっています。上級者ユーザー(凝った使い方指向者)に対しては、llParticleSystem関数のパラメーターを直接修正していただける仕様になっています。

今回は、パーティクルの色に関するパラメーター(startColor, endColor)と放出間隔に関するパラメーター(rate)を操作します。

その前に、パーティクルの一般論を説明します。

パーティクルはご存知の通り、粒子の集まりです。粒子を英訳するとパーティクルとなります。

パラメーターは大きく3種類に大別できます。
●一つに粒子に関するパラメーター
●粒子の集団化に関するパラメーター
●様相に関するパラメーター

●一つの粒子(One Particle)
粒子は生成して消滅します。LSLでは、生成のことをStart、消滅のことをEnd とよんでいます。

secondlife script particle

●粒子集団(Stream)
一つ一つの粒子が集まり集団化することで流れ(Stream)となります。
下図中の黄色い箱はパーティクル発生源です。

セカンドライフ スクリプト パーティクル

●様相(Mask, Pattern)
見た目が全く異なることを様相が変わるといいます。パーティクルの見た目をガラッと変える際に、MaskとPatternを修正します。

例えば、雨を表現するパーティクルと火を表現するパーティクルでは様相が全く異なります。この場合、両者のMaskとPatternは異なっています。

Particle Drive HUD では、ユーザーはMaskとPattern を修正する必要がないようになっています。また、本装置の操作に慣れたユーザーに対しては、MaskとPatternを簡単に修正できるようにしてあります。


●青宝石
青宝石はパーティクルのヒナ型であるParticle Prototype (Jewel) から修正を加えていきます。
(Mask とPattern には手を加えません)

●作業場
Particle Drive HUD の場合、作業はスクリプト実行が許されている場所であれば何処ででもできます。
下図において、Aa はParticle Drive HUD をHUD(Head Up Display)の左上に装着しています。

secondlife script particle

今回は、Passendale というSIM でキャンプしながら作業しました。
ちなみに、15分2L$ で30分で立たされます。あまり率は良くないのですが、空いているので何時でもすぐにできます。きれいな環境で落ち着いて作業に取り組めます。あまりキャンプの話をしてもなんですが・・・

●Particle Prototype の変形と装着
指輪の輝きを表現することとし、Particle Prototype を半径1cm の球体に変形させ、左中指に装着させました。

セカンドライフ スクリプト パーティクル


●色の修正
色は一つの粒子に関するパラメーターです。LSL では粒子発生時の色をstartColor、粒子消滅時の色をendColor とよんでいます。

下図では、One Particleに関するパラメーターを取り出し、startColor の値を修正しています。

色の三原色(Red, Green, Blue)ボタンで修正する原色を指定し、数値ボタンで値を増減させます。

secondlife script particle

各値が以下となるように操作し修正を加えます。
・・・startColor → <0.0, 0.0, 1.0>
・・・endColor → <0.0, 1.0, 1.0>

●噴出間隔(rate)の修正
流れに関するパラメーターの噴出間隔(rate)を以下のように修正します。
・・・rate → 0.0

噴出間隔とは一つのパーティクルが発生して、次のパーティクルが発生するまでの時間間隔です。
例えば、rate が1秒の場合、1秒間隔でパーティクルが発生します。

rate は「率」という意味ですが、噴出の間隔とは時間です。時間のことを率というのはとても違和感がありますが、LSL がそう命名しているので慣れるしかないです。

セカンドライフ スクリプト パーティクル

流れ(Stream)のパラメーターには上図に見えている以外に、angleBeginとangleEndとomega がありますが、今回のMask、Pattern では使用できません。そのため、Particle Drive HUD では非表示にして選択できなくしてあります。

●今後の修正点
図でお分かりのように、宝石としては輝きすぎています。具体的には光が大きいですね。
One Particle のstartSize とendSize をいじってみてください。ちなみに、startSize は一つの粒子の生成時の大きさで、endSize は消滅時の大きさです。メートル単位です。

●展示
以下の場所で展示していますので見に来てください。
・ToshimaKuの白屋(SIROYA)
http://slurl.com/secondlife/ToshimaKu/153/175/22

●Particle Prototype ベンダー
展示の青宝石パーティクルの後方にベンダーがあります(空色の☆マーク)。
(Particle Drive HUD ユーザーの方のみ使用可)

Particle Prototype 形式で無料配布しています。
・・・Particle Prototype (Blue Jewel)

Particle?Drive HUD ユーザーは以下の手順で入手してください。
(1)Particle Drive HUD を装着する
(2)Particle Prototype ベンダー(☆マーク)をクリックする
(3)30秒以内にParticle Drive HUD の☆マークをクリックする

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

  1. 2007/11/11(日) 13:37:52|
  2. パーティクルドライブ
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(変数4)

前回までのおさらいで、変数に関するプログラム問題を出題しておきます。
 
実際にプログラムしてください。初回にお話ししたように、プログラミングは体で覚えるものです。ガンバッテ実動させてください。
 
実習のやり方が全く分からない人は、以下のHP の項目「●実習に際して」をクリックしてください。
(またこのブログに戻るのですが・・・)
セカンドライフゲームフォーラム
 
また、今までの、スクリプト超初心者講座を上記HPにまとめてあります。ただ単にこのブログを項目分けしただけですが、ブログより見やすいと思います。そちらもご参照ください。
 
ここでまず、問題を解くのに必要な、まだ説明していないことをお話ししたいと思います。
 
●省略した書き方
今までは、変数を宣言することと、変数に値を代入することを別々に記述していました。
これを一行で記述することができます。
 
・・・別々に記述
string a;                                                        ← 変数の宣言
a = "Aa";              ← 値の代入    
 
・・・一行で記述
string a = "Aa";
 
変数の宣言と値の代入が一行で記述されています。
 
 
●プラス演算子(+)
プラス演算子は「足し算」を実行します。
 
足し合う変数や値が「整数型」の場合は、通常の足し算となります。
a = 123 + 456;
整数123と整数456を足して、整数型変数aに代入しています。
ここで、変数aには値579が代入されます。
 
足し合う変数や値が「文字列型」の場合は、面白い演算となります。
b = "Hello," + "Avatar!";
文字列”Hello,”と文字列”Avatar!”を結合して、文字列型変数bに代入します。
つまり、変数bには値”Hello,Avatar!”が代入されます。
 
 
●実習1.
以下の動きをするプログラムを制作しなさい。

箱をタッチすると「アバター名」とチャットする。

ヒント
・touchイベントの中で文字列型変数a を宣言する。
・変数aにアバターの名前を代入する。
・llSay関数を用いて「アバター名」をチャットする。
 
 
●実習2.
以下の動きをするプログラムを制作しなさい。
箱をタッチすると「Hello,アバター名!」とチャットする。

ヒント
・実習1のヒント参照
・文字列の足し算のために、新たな文字列型変数bを宣言する。
 
 
●実習3.
以下の動きをするプログラムを制作しなさい。
箱をタッチすると、整数型変数aの値をチャットする。

ヒント
・touchイベントの中で整数型変数a を宣言する。
・変数aに値(例えば、123)を代入する。
・文字列型変数bを宣言する。
・型変換を行い、aの値をbに代入する。
・llSay関数を用いて変数bの値をチャットする。
 
 
●実習4.
以下の仕様のプログラムを制作しなさい。
箱をタッチすると、整数型変数aとbを足した値をチャットする

ヒント
・実習3のヒント参照
・整数型変数aを宣言し、値(例えば、123)を代入する。
・整数型変数bを宣言し、値(例えば、456)を代入する。
・足した値を保存するメモリー領域(整数型変数c)を宣言する。
・変数cに変数a値と変数bの値を足した値を代入する。
 

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

  1. 2007/11/10(土) 00:08:51|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

新作パーティクル(ソーダ)

新作パーティクルをつくりました。ソーダの泡を再現しました。

パーティクルの「雪」をひな形として修正していきます。

パーティクル関数のパラメータを以下の方針で修正します。

●age(秒)
ソーダの容器の大きさにより適宜調整する
●alpha
start では半透明(0.4)にし、end でははっきりさせる(0.7)
●size(メートル)
start では小さく(0.04)、end では大きく(0.08)
●accel
Z軸上向きに加速させる。微調整を要する。
例: <0.0, 0.0, 0.48>
●wind(マスク)
風の影響は受けないので、FALSE にする

secondlife パーティクル ソーダ

泡のサイズや加速度などを微調整していくと、「突然」本物の泡に見えてきます。

●展示
以下の場所で展示していますので、見に来てください。
・・・ToshimaKu の白家(SIROYA)
http://slurl.com/secondlife/ToshimaKu/153/175/22
・・・SL Game Forum
http://slurl.com/secondlife/Game%20Forum/49/82/23

●Particle Prototype ベンダー
上図のサイダーカップの上にある☆がベンダーです。
(Particle Drive HUD オーナーのみ使用可)

Particle Prototype 形式で無料配布しています。
・・・Particle Prototype (Soda)

Particle Drive HUD オーナーは以下の手順で入手してください。
(1)Particle Drive HUD を装着する
(2)Particle Prototype ベンダーをクリックする
(3)30秒以内にParticle Drive HUD の☆をクリックする

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

  1. 2007/11/08(木) 16:18:48|
  2. パーティクルドライブ
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(変数3)

自分でプログラムを書けるようになるには、変数について詳しく理解する必要があります。

今回は「変数の型」について詳しく見ていきます。

●整数型の宣言
これまでに、変数を使用する際には、変数名と変数の型を宣言する必要があることを説明しました。

変数の型については、前回までは「文字列型」を使用していました。

今回、新たに「整数型」をお話しします。

整数型の変数とはその名のとおり、整数を保存しておくためのメモリー領域です。

以下の書式で整数型の変数を宣言します(下図、参照)。

integer  b;

変数名b の整数型の変数が宣言され、メモリー領域が確保されます。

下図は、文字列型の変数a と、整数型の変数b が宣言された状態を示しています。

secondlife スクリプト 変数

●整数型変数への値の代入
代入演算子(=)を使用して、整数値を代入します。

b = 123;

整数型の変数に文字列を代入するとエラーになります。

b = "123"; ← エラー

一般に、変数の型と代入する値の型が一致しないとエラーとなります。

ここで、「型変換」を行います。

b = (integer)"123";

変数b に整数値123 が代入されます。

型変換することで、文字列"123" が整数123に変換されます。

●型の違う変数間での値のやり取り
下図のように、文字列型の変数a の値"123" を、整数型の変数b に代入する場合、どうすればよいでしょうか?
考えてみてください。

secondlife スクリプト 変数

答えは、

b = (integer)a;

です。図にするとこのようになります。

secondlife スクリプト 変数

一般に、左辺と右辺の変数の型が異なる場合、以下となります。

変数1  = (変数1の型)変数2;

●llSay 関数
以下のllSay 関数はエラーになります。

integer a;
a = 123;
llSay(0, a);

何故でしょうか?

前々回、llSay 関数について説明しました。分からなかった人は前々回のllSay 関数に関する説明を参照してください。

答えは、llSay 関数の2番目のパラメーターが文字列ではないからです。
llSay 関数の2番目のパラメーターは文字列である必要があります。

integer a;
string b;
a = 123;
b = (string)a;
llSay(0, b);

文字列型の変数b を新たに宣言し、変数aの値を型変換し変数b に代入します。

●実習1.
準備1:地面に新しいプリムを作成してください。
準備2:新しいスクリプト(New Script)を作成してください。

スクリプトを以下のように記述し、実行してください。整数型の変数の値をチャット表示することができましたか。

default
{
    touch_start(integer total_number)
    {
        integer a;
        string b;
        a = 123;
        b = (string)a;
        llSay(0, b);
    }
}

●問題1.
以下のプログラムを作りなさい。
・aという変数名の整数型変数を宣言し、整数値 123 を代入する。
・bという変数名の整数型変数を宣言し、整数値 456 を代入する。
・cという変数名の整数型変数を宣言する。
・変数a と変数b を足し算し、変数c に代入する。
・足し算の結果をチャット出力する(llSay関数使用)。

ヒント:変数a と変数 b の値を変数c に代入するプログラムは以下のようになります。

c = a + b;

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

  1. 2007/11/04(日) 19:43:08|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(変数2)

今回は、前回のスクリプト超初心者講座(変数)のつづきです。

まず、前回のおさらいをしておきます。

それでは、以下のプログラム部分が実行されるとメモリーはどうなるでしょうか?

 string  a;
 string  b;
 a  =  "123";


答えは以下となります。
●メモリー上に、変数名a で文字列型の領域が確保されます。
●メモリー上に、変数名b で文字列型の領域が確保されます。
●変数a に値 "123" が代入されます。
(下図、参照)

secondlife script 変数

●代入演算子(=)
変数の中に値を代入する際に代入演算子を使用します。
a = "123"; を一般化すると以下となります。

変数 = 値;

左辺の「変数」に直接「値」を代入しています。

変数に値を代入する方法は他にもあります。変数の中に変数を介して間接的に値を入れる方法です。

変数 = 変数;

具体的に考えていきます。
上図の段階で、以下のプログラムを動かします。

b  =  a;

右辺が変数の場合、その変数の値が左辺の変数にコピーされます。
上図の場合で考えます。
左辺の変数(b)に、右辺の変数の値("123")がコピーされます。

secondlife script 変数

ここで、変数b に値が代入されますが、元の変数a の値はそのまま保持されていることに注意してください。

●実習1.
準備1:地面に新しいプリムを作成してください。
準備2:新しいスクリプト(New Script)を作成してください。

スクリプトを以下のように修正し、実行してください。動作結果を予想してください。
予想通りになりましたか。

default
{
    touch_start(integer total_number)
    {
        string a;
        string b;
        a = "123";
        b = a;
        llSay(0, a);
        llSay(0, b);
    }
}

●問題1.
以下のプログラムを作りなさい。
●「a」という変数名の文字列型変数を宣言し、文字列 "123" を代入する。
●「b」という変数名の文字列型変数を宣言し、文字列 "456" を代入する。
●変数a と変数b の値をチャット出力する(llSay関数使用)。
●変数a と変数b の値を入れ替える。
●変数a と変数b の値をチャット出力する(llSay関数使用)。

ヒント1:変数a と変数 b の値を入れ替える前のllSay(0, a); は "123" と返しますが、
入れ替えた後ではllSay(0, a); は "456" と返します。

ヒント2:変数の値入れ替え前後のメモリー状態

図.変数値入れ替え前
secondlife script 変数

図.変数値入れ替え後
secondlife script 変数

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

  1. 2007/11/03(土) 17:29:56|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(変数)

以前、コンピューターの構造についてお話ししました。主記憶装置(以下、メモリー)が一番重要な装置であることを説明しました。


secondlife script 変数

プログラマーはメモリーを自由に使用することができます。

自分が使用するメモリーの領域を「私が使います」と宣言します。

プログラマーが使用すると宣言したメモリー上の領域を「変数」とよびます。

宣言した領域を他のプログラム(例えば、OSなど)は使用できません。

secondlife script 変数

変数を宣言する場合、変数名と変数の型を宣言します。

●変数名
上図の場合、「a」 という変数名でメモリーの一部を確保しています

●変数の型
確保した領域に「何」を記憶させたいかを宣言します。
・・・・・ 例えば、文字列・整数・ベクトル・等。
この何を記憶させたいかを宣言することを「変数の型を宣言する」といいます。
上図の場合、文字列を記憶させたいので、変数名a の変数の型は文字列型を宣言します。

変数宣言の書式:
●変数名「a」 という文字列型の変数の宣言

secondlife script 変数 宣言

最後のセミコロン(;)を忘れずに!

●変数に値を代入する
変数に値を代入するには以下のようにします。

secondlife script 変数 代入

ここで、記号イコール(=)を代入演算子とよびます。

数学でイコール(=)は、右辺と左辺が等しいといった意味がありました。
プログラムにおいてイコール(=)は、左辺の変数に右辺の値を代入することを意味します。

上の例では、変数a に値 "123" を代入しています。

セミコロン(;)を忘れずに!


●実習1.
準備1:地面に新しいプリムを作成してください。
準備2:新しいスクリプト(New Script)を作成してください。

スクリプトを以下のように修正し、実行してください。

secondlife script 変数

プログラムの説明
●default ステート
LSL は複数のステート(状態)を記述することができます。いかなる場合においても、defaultステートは必ず記述する必要があります。defaultステートは、スクリプトが動く際にまず最初に動くステートです。

●touch_start イベント
LSL はいずれかのステートで何らかのイベント(出来事)が発生するのを待っています。上記の例では、LSLはdefaultステートで待機しています。
スクリプトが入ったプリムを「タッチ」すると、touch_start イベントの中身(ブロック内)が順次実行されます。

●llSay 関数
llSay 関数はLSL で予め用意されている関数です。
パラメーター(引数)を2個持ちます。
最初のパラメーターは通信チャンネル番号です。0番はパブリックチャンネルで、アバターが通常チャットしているチャンネルです。2番目のパラメーターは会話の内容です。
llSay(0,  a); は、「変数a の値をチャットしなさい」といった命令です。

●問題1.
「b」 という変数名の文字列型変数を宣言し、文字列 "456" を代入するプログラムを作りなさい。
ヒント:なし

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

  1. 2007/11/02(金) 17:39:48|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

LSL の書式(作法)

LSL(リンデンスクリプト) を記述するとき、準拠すべき記述方法(書式)があります。

プログラム以外の一般の文章にも書式はあります。
「拝啓・・・敬具」などがそうです。

これは守らなくても意味は伝わるので、「お作法」のようなものです。

プログラミングにおけるお作法は、プログラマの考え方が反映されるので、「コーディングスタイル」とよんだりもします。

この作法には絶対守るべきものから、まあどちらでも良いものまでいろいろあります。
また、バリエーションがあったりもします。

何か曖昧なところが、「お作法」的ですね。

今回は、優先度が高いものを説明したいと思います。
その他のお作法については順次その都度解説したいと思います。

以下のスクリプトで具体的に説明します。

secondlife スクリプト 書式 コーディングスタイル

●ルール1.
 開中括弧{ は必ず閉中括弧 }とペアにします。
これは「お作法」ではなく「文法」でした。これを守らないと一発アウト(エラー)です。
ペアにならない場合、かなり深刻なエラーとなります。

・・・開・閉括弧のペアのことを「ブロック」とよびます。


●ルール2.
 ブロックの字下げ(インデント)位置は、ブロック直前の単語と頭を合わせる。

・・・図では「default」という単語の頭である「d」の位置に、ブロック位置を合わせています。
他のブロックも同様であることが分かります。


●ルール3.
 ブロックの「中身」は「タブ(Tab)」キーを使用して字下げをする。
これは、スクリプトのエディターが自動的にやってくれています。自分で字下げするときは、タブキーを使用してください。このエディターの場合、タブキーを一回おすと半角空白が4個記述されます。

・・・図では、state_entry() の位置が字下げしてあることが確認できます。

そうすると必然的にブロックの中にまたブロックがあるような場合、中のブロックは字下げされることになります。

そのため、ブロックの始めと終わり(開・閉中括弧)が見やすくなります。


・・・図では、青丸で囲まれた開・閉括弧がペアになっていることがすぐに判別できます。

また、橙丸で囲まれた開・閉括弧もペアになっていることが「一目瞭然」で分かります。

プログラミングにおける、お作法の目的は一目瞭然にすることと考えてよいでしょう。
一目瞭然にすることで、プログラムミス(バグ)を低減させることができます。

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

  1. 2007/11/01(木) 18:25:30|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

ゲームフォーラム始めました

セカンドライフ ゲームフォーラムでは、セカンドライフでの「物づくり」と「ラーニング」に関する情報をいろいろと紹介します。

セカンドライフ ゲームフォーラムのHP とSIM を作りました。
(両方ともまだまだ整備中です・・・) ^ ^);

●HP
セカンドライフ ゲームフォーラム(Second Life Game Forum)
http://slgameforum.ninja-web.net/

●SIM
Secondlife Game Forum(Game Forum)
http://slurl.com/secondlife/Game%20Forum/122/138/54

セカンドライフ SIM 物づくり ラーニング

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

  1. 2007/11/01(木) 13:55:38|
  2. 空中工房
  3. | トラックバック:0
  4. | コメント:0

プロフィール

Aa

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

ショップのSLURL

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

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

最近の記事

月別アーカイブ

カテゴリー

ブログ内検索

おすすめ商品!


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



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



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



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

ゲームPC

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

リンク

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

スポンサードリンク

スポンサードリンク

最近のコメント

最近のトラックバック

RSSフィード

FC2カウンター

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