BlackSheep-LSL@Wiki内検索 / 「照明を作ろう」で検索した結果

検索 :
  • 照明を作ろう
    はじめに build ライト効果の設定 初めての照明スクリプト 同じ処理をまとめよう 今回のポイント はじめに 椅子、ドアと作ってきたことで、だいぶスクリプトの構成については理解できてきたと思います。 今回はさらに練習として、照明を作ってみましょう。 ただの照明では面白くありませんので、カラフルに色が変わるものにしたいと思います。 build お好みで照明器具を作りましょう。 ランプ型、蛍光灯型、電球型、なんでも構いません。 私はこんなのを作りました。 Snapshot_107.jpg 手抜きなスタンドライトですw ライト効果の設定 今回のスクリプトは、タッチするたびに照明の色が変わるものにしましょう。 最初は明かりがついていなくて、タッチすると赤く光り、次にタッチすると緑、さらにタッチすると青、もう一度タッチすると照明が消える(...
  • スクリプト初級
    ...で開くドアの作り方 照明を作ろう・・・タッチで灯る照明の作り方 聞き耳を立てる・・・リッスンの使い方 ダイアログを使おう・・・ダイアログの使い方 看板を作ろう・・・様々な看板の作り方 ベンダーを作ろう・・・テクスチャの切り替え方法 お金を扱う・・・お金のやり取りをする方法 ノートを使おう・・・ノートカードからデータを読み込む方法 アニメさせよう・・・アニメーションの使い方 ポーズボール・・・座るとアニメーションするLSL prim間通信・・・カラーチェンジャー作成 HUDを作ろう・・・テレポートHUDの作成 音を鳴らそう・・・サウンドの使い方 rez!・・・オブジェクトをrezさせる方法 ステートのこと・・・ステートの使いどころ センサーを使おう・・・センサーの使用方法 デモ商品を作ろう・・・アタッチの制御方法 カメラ制御・・・カメラの制御方法 衝突判定・・・衝突判定の方法
  • 椅子を作ろう
    build 座るための仕組み sitスクリプト build 今回は椅子を作ってみましょう。 第一回でも触れましたが、buildで椅子を作っただけでは、正しく座ることができません。 椅子はやっぱり座れたほうが心休まりますので、座れる椅子を作ることにします。 スクリプトで椅子を作り出すことも不可能ではありませんが、いきなりでは難しいので、buildツールを使って椅子の形を作ってください。 椅子の形についてはどんなものでもかまいません。 ソファであろうが、スツールであろうが、buildの練習のために好みの形の椅子を自作してみるのが良いかもしれません。 「スクリプトだけ勉強したいんだ!」 という方は、とりあえず円柱なり立方体なりで間に合わせてもOKです。 もちろん、以前に椅子を作ったことがあって、 「ちゃんと座れるようにしたいのになぁ・・・」 という方は、ぜひそ...
  • 看板を作ろう
    はじめに フローティングテキストllSetText関数 回転看板llTargetOmega関数 アニメーション看板llSetTextureAnim関数 地図看板llSetTouchText関数 llMapDestination関数 ランドマーク看板llGiveInventoryList関数 まとめ はじめに 第六回~第八回は初級スクリプトの最初の山場でした。 へヴィな内容が続きましたので、今回はちょっと息抜き的に、しかしながら実用的なスクリプトを作ってみたいと思います。 SLで店をやるという人は多いでしょう。 そして商品の販売用や、宣伝のために、看板を作りたいという人もいるかと思います。 綺麗なテクスチャさえ用意すれば、それなりの看板を作ることができますが、この記事は一応スクリプトの勉強ですのでw、スクリプトを使った動きのある看板に挑戦してみましょう。 照明...
  • ドアを作ろう
    build ドアスクリプトの構成 回転の処理 開けっ放しは嫌よ 今回のまとめ build 基本的なものにも関わらず、スクリプト初心者にとっては少々難しいのがドアのスクリプトです。 真横にスライドするドアならばまだ楽ですが、回転の要素が入ってくると途端に難しいと思う人が多いようですね。 前回の椅子を作る際に、回転角度の指定方法について便利な書き方を説明しましたので、今回はそれを使ってドアのスクリプトにチャレンジしてみようと思います。 例によってまずはbuildからです。 ドアの作り方にもいろいろありますが、注意していただきたいことは一点のみです。 スクリプトによる回転は、あくまでもオブジェクトの中心座標(ルート座標)を基準に行われますので、ルートの座標をドアの蝶番の位置にあうようにしなければなりません。 私は単純に、立方体を板状にした1primのドアを用意し...
  • HUDを作ろう
    はじめに HUDのbuild ボタンのスクリプト ルートのスクリプト 今回のポイント はじめに prim間通信をもう少し練習するという意味で、今回はHUDを作ってみましょう。 HUDというのはヘッドアップディスプレイ (Head-Up Display)のことで、SLでは画面上に表示されるインターフェースのことを言います。 ミニマップなども広義の意味ではHUDになるのでしょうが、SLでは特にユーザーが独自に作ったインターフェースのことを指します。 日本人にとって馴染みのあるものは翻訳機などでしょうか。 チャットの自動英語翻訳を行ってくれるJ2Eは画面左中央に表示される半円型のHUDですね。 何のHUDを作ってもいいのですが、あんまり出回ってなくて、それでいて便利そうなものが良いですね・・・。 テレポート用HUDなどはどうでしょうか。 HUDのボタンにテレポート先...
  • ベンダーを作ろう
    はじめに ベンダーの仕組みllSetTexture関数 タッチされたのは誰?llDetectedLinkNumber関数 画像切り替えスクリプト 今回のポイント はじめに SLでアイテムを販売するには、必ずしもスクリプトが必要になるわけではありません。 販売用のオブジェクト(ポスター、看板、箱など)を用意し、そのオブジェクトのコンテンツの中に売りたいアイテムを詰め、値段とコンテンツを販売する設定にすれば、ひとまず売ることは可能になります。 ですが、この方法はアイテム一つ(あるいは1セット)につき一つのオブジェクトが必要となり、商品が増えるに従ってprim数が増加していくという問題点があります。 また、販売用オブジェクトを並べるにはどうしてもスペースが必要になりますので、限られた店舗スペースでは、自ずと販売できるアイテムの数が限られてしまいます。 スクリプトを使ったベ...
  • デモ商品を作ろう
    はじめに デモ用商品の仕組み アタッチの制御llDetachFromAvatar(); attach?(key attached) llDie(); デモ商品用スクリプト 今回のポイント はじめに 今回はデモ用の商品を作る方法について書こうと思います。 デモ用とは、例えば一定期間のみ使用可能なもの、特定回数使ったら使えなくなるようなサンプル商品です。 当然ながら、スクリプトを使って制御をしますので、スクリプトが組み込めない商品(スキン・服・テクスチャ・アニメーションなど)に関してはここで解説する方法は使えません。 スクリプトが組み込める商品であれば、どんなものにも応用は利きますが、今回は特にアタッチメントについて見ていきます。 というのも、アタッチを制御するスクリプトについて今まで説明していないからです(^^; デモ用商品のスクリプトを通して、スクリプトによ...
  • ダイアログを使おう
    ...いう方は、第六回の「照明を作ろう」から戻ってお読みいただくのが良いかと思います。 照明のスクリプト作成について順を追って解説しております。 さすがに照明スクリプトがこれだけ続くと、いいかげん目がチカチカして来そうですw 今回は頑張って完成まで行き着きたいと思います。さて照明スクリプトですが、前回までで、チャットで色名を発言することで照明の色が変化するところまで出来ています。 照明としての機能はすでに実装済みですが、いちいちチャットで色名を入力するのが手間だという問題が残っています。 今回は「ダイアログ」を使うことで、より容易に色の変更が可能な照明を作り、一応の完成としたいと思います。 ダイアログ ダイアログとは、確認メッセージの表示や簡単な入力などに使われる小さなウィンドウのことです。 SLでもいろいろなところで使われていますので見たことがある人も多いかと...
  • prim間通信
    ...たね。 詳しくは「照明を作ろう」の回を参照して下さい。 integer face primのどの面の色を変えるかの指定です。 面の番号については「看板を作ろう」の回で触れました。 例えば立方体primの上の面だけ赤色にしたいという場合は、 llSetColor( 1.0, 0.0, 0.0 , 0); このようになります。 リンクされている他のprimの色を変えるための関数もあります。 llSetLinkColor()関数です。 llSetLinkColor(integer linknumber, vector color, integer face) integer linknumber 色を変えたいprimのリンクナンバーを指定します。 リンクナンバーについては「ベンダーを作ろう」の回で説明しています。 この引数以外は...
  • 聞き耳を立てる
    前回の問題点 listenllListen関数 listenイベント listen使用上の注意 llListenRemove関数 照明スクリプト改 今回のポイント 照明スクリプトの続きです。 前回作ったスクリプトの改良になりますので、実習する際には前回分からやってみて下さい。 前回の問題点 前回はタッチするたびに赤、緑、青、消灯と変化する照明を作りましたが、この照明は好きな色にする際に何度もタッチしなければならないという問題点があります。 いきなり青い光をつけたいとか、赤い光で点けていたが消灯したいというようなとき、数回クリックするのは面倒です。 ラグが発生しているときなどには、誤って二度、三度とタッチしてしまい、一気に色が変わってしまうようなこともあります。 何度もタッチすることなく好みの色にしたり、消灯するようにしたいところです。 例えば、タッチのたび...
  • llMapDestination
    llMapDestination llMapDestination(string simname, vector position, vector lookat) SIM名simnameの位置positionへのテレポート準備が完了したマップを表示する。 あくまでもマップを表示するだけなので、実際にテレポートするかどうかはアバター次第である。 なお、引数lookatは現在使われておりません。 この関数には「誰に」対してマップを表示するかを指定する引数が無い。 あらまぁ、困ったわ。 実はこの関数、タッチイベント内、もしくはアタッチメントでしか使えないことになっている。 つまりマップ表示はタッチした人、もしくはアタッチしているオーナーに対して行われる。 具体的にどうやって使うかは、「看板を作ろう」(初級スクリプト第九回)を参照。 ...
  • llMessageLinked
    llMessageLinked llMessageLinked(integer linknum, integer num, string str, key id) リンクオブジェクトにおいてprim間メッセージを送信する。 引数linknumは送信先primのリンクナンバーである。 num、str、idの引数には任意のデータを指定することができる。 リンクメッセージが受信されるとlink_message?イベントが起こる。 link_message?イベントの引数には、llMessageLinked関数によって送信されたnum、str、idの各引数が渡される。 つまり、 1, "test", NULL_KEY という3つのデータを送信すれば、 1, "test", NULL_KEY という3つの値がlink_...
  • ステートのこと
    はじめに ステートの復習 ステートの使いどころ ステートとグローバル変数グローバル変数 ステートの注意点 今回のポイント はじめに 今回はスクリプトの構成について少し突っ込んだ話をします。 具体的に実用性のあるスクリプトは出てきませんが、自分で1からスクリプトを書こうというとき、構成をどうするか考える際の参考にしていただければと思います。 このwikiの記事では、最初の頃にスクリプトの構成について触れました。 「ステート」「イベント」「処理」の3つの要素で成り立っているという話です。 私はこの3つがスクリプトの基本要素であると説明し、スクリプトを書く際には作ろうとしている機能がどんな「ステート」「イベント」「処理」になるのか意識すると良いと書いてきましたが、実際には「ステート」がどんな時に登場するのか、いまひとつハッキリしないという方もいらっしゃるのではないで...
  • 鍵をかける
    はじめに 鍵をかけることの意味操作できる人を限定する方法 鍵をかける 強制排除スクリプト はじめに やもさんより質問いただいたスクリプトについて解説です。 [やもさんからの質問] 最近自分で服を作るようになり試着の為の更衣室を用意したのですが ドアに鍵をかけるか、自分にしか開けられないドアするにはどのようにしたら良いのでしょうか? これって結構ニーズのある話だと思います。 着替えの最中は裸になることも多く、やはり人に見られたくない場合がありますので・・・。 また、Kirさんからも関連のある質問をいただきました。 [Kirさんからの質問] なんとか、オーナー限定にて動作するように改良したいのですが、 if (llDetectedKey(0) == llGetOwner()){ handle=llListen(channel, "&qu...
  • rez!
    はじめに rezするllRezObject rezされるon_rez?(integer param) temp rezスクリプト 今回のポイント はじめに 初級者向けに説明すべきことはもはやほとんど残っていません(^^; もちろん、lslに関してはまだまだ膨大な機能があり、触れていない部分は多いのですが、あくまでも「初級」ということであれば、残っているのは今回扱うrezを含めて2、3の項目くらいかと思います。 ちなみに今まで一切触れてこなかった機能として、物理系のスクリプトがあります。 物理系のスクリプトとは、SL内の物理的なオブジェクトを扱うための関数群のことです。 例えば加速させたり、重力を無くしたり、コマのように回転する力を加えたりできるのですが、これらの関数についてはスクリプトの知識というよりはSL内物理学の知識が必要になってきますので、初級者向けの対象外と...
  • llDetectedGrab
    llDetectedGrab vector llDetectedGrab(integer number) タッチイベントにおいて、オブジェクトがドラッグ移動されている方向を取得する。 どういうことかと言うと、移動可能なワールド内のオブジェクトの上でマウス左ボタンをホールドし、そのままマウスを動かすとオブジェクトを移動させることができるが、そのときの移動方向を取得する関数である。 オブジェクトは物理オブジェクトである必要はない。 この関数で取得されるのはあくまでもドラッグ移動されている方向だけであり、例えばインパルスやフォースなどで物理的に動かされている場合はZERO_VECTORが返る。 llDetectedGrabはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセ...
  • トップ
    このWikiについて BlackSheep-LSL@wikiはMakapu改めBlackSheep-LSL@SLMameの移転サイトです。 セカンドライフのスクリプト(LSL)について解説するwikiです。 特に「何かやってみたいのだけれども、何をどうしていいのか」わからない方に向けて、なるべく初歩的なところからLSLについて説明を試みています。 LSLの考え方や作り方を理解し、「面白いな~」と思った方がさらに高度なものを作り出すための足がかりにでもなれば幸いです。 なお、掲載しているスクリプトや情報については、素人仕事ですので、記述ミスや勘違いなどが無いとは言えません。 間違いに気づいた方はご指摘下さると助かります。 また、特に断りがない限りは掲載のコードはフリーのサンプルです。 自由に利用して実用化・商品化していただいて構いませんが、動作を保証するものではありませ...
  • 回転について
    はじめに 回転を扱うプログラミングは、初めての人には少々敷居の高いものです。 何故なら回転は3Dグラフィックの知識がないと理解しにくく、例えばπ(パイ)とか三角関数のように、学校の数学で習うようなものではないからです。 まったく予備知識がない状態で回転の処理に取り組むのは、非常に難解なパズルに挑むのに似ています。 そう、例えばルービックキューブを独力で解ける人なら、回転プログラムも簡単に理解できるかもしれません(^^; ある程度LSLを使いこなしている人であっても、 「回転だけは・・・」 苦手意識を持っている人も少なくないくらいです。 私が受ける質問の中でも、回転関連のものはかなり多いです。 そんなわけで、ハッキリ言って回転は難しいです(^^; にもかかわらず回転を使わないといけない場面というのは非常に多いのです。 例えば単純なドアを作るのにも、回転は出てきま...
  • llGetCameraRot
    llGetCameraRot rotation llGetCameraRot() カメラの角度を取得する。 この関数を実行するにはPERMISSION_TRACK_CAMERAの取得が必要。 llGetCameraPos関数と組み合わせて使うことで、アバターがどこを見ているかを調べることができる。 サンプルはllGetCameraPos関数の説明を参照。 名前 コメント
  • llSetAlpha
    llSetAlpha llSetAlpha(float alpha, integer face) 引数faceで指定した面の透明度をalphaにする。 alphaは0.0~1.0の範囲で指定し、0.0は完全透明、1.0は完全不透明である。 この関数で変更できる透明度はスクリプトの稼動しているprimの透明度だけである。 リンクprimの透明度を変更するにはllSetLinkAlpha関数を使って欲しいみたいだ。 引数faceに指定可能な値についてはllGetColor関数の説明を参照。 名前 コメント
  • llSetLinkAlpha
    llSetLinkAlpha llSetLinkAlpha(integer linknumber, float alpha, integer face) 引数linknumberのリンクprimに関して、引数faceで指定した面の透明度をalphaにする。 alphaは0.0~1.0の範囲で指定し、0.0は完全透明、1.0は完全不透明である。 スクリプトの稼動しているprimの透明度を変更する際にはllSetAlpha関数を使っても良い。 引数faceに指定可能な値についてはllSetColor関数の説明を参照。 名前 コ...
  • llGetRegionCorner
    llGetRegionCorner vector llGetRegionCorner() グローバル座標におけるSIMの南西隅の座標を返す。 グローバル座標系とは全SIMが展開されている座標系のこと。 通常オブジェクトの位置指定などにはSIM内の座標が使用されるが、このllGetRegionCorner関数の戻り値+SIM内の座標を使用するとグローバル座標系における位置を扱うことができる。 SIMを越えて運行する乗り物などを作る際にはグローバル座標系を利用した位置管理が有用になるだろう(やったことないです。っていうかSIM複数なんて自由に扱える立場にありませんw)。 名前 ...
  • llRotateTexture
    llRotateTexture llRotateTexture(float angle, integer side) 引数sideで指定した面のテクスチャの回転をangleにする。 引数angleの単位はラジアンなので注意すること。 弧度法で指定したい場合は、 llRotateTexture(90 * DEG_TO_RAD, ALL_SIDES); のようにDEG_TO_RAD定数を使えばよい。 面の指定方法はllGetColor関数の説明を参照。 primの形状によって面番号は異なる。 なお、リンクされたオブジェクトにおいて、スクリプトが入っているprim以外のprimのテクスチャを回転させるには、llSetLinkPrimitiveParams?関数を使う。 ...
  • llDetectedPos
    llDetectedPos vector llDetectedPos(integer number) 検知されたアバター/オブジェクトの位置を取得する。 llDetectedPosはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。 以下の例は衝突したアバター/オブジェクトの位置を表示する。 default { collision_start(integer num_detected) { llSay(0, "Detected position is " + (string)llDetectedPos(0)); } }
  • llDetectedVel
    llDetectedVel vector llDetectedVel(integer number) 検知されたアバター/オブジェクトの速度及び進行方向を取得する。 主に衝突イベントにて使用される。 llDetectedVelはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。 以下の例は衝突したアバター/オブジェクトの速度を表示する。 default { collision_start(integer num_detected) { llSay(0, "Detected velocity is " + (string)llVecMag(llDetectedVel(0))); ...
  • llDetectedOwner
    llDetectedOwner key llDetectedOwner(integer number) 検知されたオブジェクトのオーナーのUUIDを取得する。 llDetectedOwnerはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。 以下の例は衝突したオブジェクトのオーナーのUUIDを表示する。 default { collision_start(integer num_detected) { llSay(0, "Key of the owner is " + (string)llDetectedOwner(0)); } } オーナーが分かるからと言って、衝突時の被害を弁償...
  • llDetectedName
    llDetectedName string llDetectedName(integer number) 検知されたアバター/オブジェクトの名称を取得する。 llDetectedNameはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。 なお、バグなのか仕様なのか不明だが、llDetectedName関数を使用した時点で対象のアバター/オブジェクトがSIM外に移動したり、EXITしてしまっている場合は、名前ではなくUUIDを返すらしい。 以下の例はタッチしたアバターの名前を表示する。 default { touch_start(integer num_detected) { llSay(0, "...
  • llDetectedRot
    llDetectedRot rotation llDetectedRot(integer number) 検知されたアバター/オブジェクトの回転値を取得する。 llDetectedRotはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。 以下の例は衝突したアバター/オブジェクトの回転値を表示する。 default { collision_start(integer num_detected) { llSay(0, "Detected rotation is " + (string)llDetectedRot(0)); } } llDetectedRot関数で返されるアバターの回転...
  • 基礎知識
    基礎知識 LSLの基礎知識に関する記事をまとめてります。 LSLはプログラミング言語の一種ですので、理解を深めるためには一般的なプログラミングの基礎知識が不可欠です。 ここではLSLに限らずプログラミング全般に共通する概念の説明を含む場合があります。 Ⅰ.スクリプトとは? 「スクリプト」の意味 台本とスクリプト台本との違い まとめ Ⅰ-1.LSLの構成要素は? LSLを構成する3つの要素状態 きっかけ 処理 3つの要素の書き方 まとめ Ⅰ-2.処理とは? 処理はキモコンピュータが理解できるもの Ⅰ-2-A.変数とは? 変数変数の種類 変数の用意 変数の中身 変数から変数へ まとめ Ⅰ-2-B.定数とは? 定数もう一つの「定数」 まとめ Ⅰ-2-C.演算子とは? 演算子基本演算 異なる型同士での演算 基本演算の応用 論理演算 論理演算の応用 Ⅰ...
  • llGetLinkName
    llGetLinkName string llGetLinkName(integer linknum) linknumで示されるリンクprimの名前を返す。 オブジェクトが単一primの場合、linknumに指定できる有効な値は0のみである。 オブジェクトがリンクされている場合は、ルートprimのリンクナンバーは1となり、2以降は子primである。 以下の例はリンクオブジェクトにおいて、タッチされたprimの名前を返す。 default { touch_start(integer detected){ llSay(0, "Touched prim is " + llGetLinkName(llDetectedLinkNumber(0))); } } この関数はオブジェクト上の「ボタン」を実装する際に有用である。 タッチさ...
  • llDetectedGroup
    llDetectedGroup integer llDetectedGroup(integer number) 検知されたアバター/オブジェクトのグループが、自分自身(スクリプトを実行しているオブジェクト)のグループと同じかどうかを判定する。 同じグループだった場合はTRUE、そうでない場合はFALSEを返す。 アバターが同じグループに所属していたとしても、そのグループをアクティブにしていない場合はFALSEを返すので注意。 スクリプトを実行しているオブジェクトにグループが設定されていなかった場合は、検知されたアバター/オブジェクトがグループに所属していない(またはどのグループもアクティブにしてない)場合のみTRUEを返す。 llDetectedGroupはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級ス...
  • llScaleTexture
    llScaleTexture llScaleTexture(float horizontal, float vertical, integer side) 引数faceで指定した面のテクスチャのスケール(リピート)を設定する。 スケールは引数horizontalで水平方向の倍率、引数verticalで垂直方向の倍率を指定する。 この関数で指定する水平・垂直方向のテクスチャ倍率は、ビルドツールで指定できる"Repeats per Face Horizontal (U)"及び"Vertical (V)"と等しい。 面の指定方法はllGetColor関数の説明を参照。 primの形状によって面番号は異なる。 この関数の実行には0.2秒かかる。 テクスチャのスケールをコントロールするには他にllSetPrimitiv...
  • llDetectedType
    llDetectedType integer llDetectedType(integer number) 検知対象の種別(アバター/オブジェクト/スクリプトの有無等)を返す。 llDetectedTypeはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。 llDetectedTypeの戻り値はビットフィールドになっている。 ビットフィールドとは、いくつかの値の組み合わせであり、フィールド内の特定の値がONかOFFかは 演算によって判別する。 llDetectedType(0) AGENT → フィールド"AGENT"がONならTRUE、OFFならFALSE llDetectedType(...
  • モジュール化
    はじめに スクリプトのサイズ モジュール化の概念 モジュール化の手法 ドア・システム・スクリプト基本的なモジュールslide door module standard door module door main module short touch module group touch module 拡張モジュールsensor module phantom door module モジュール化の効果 モジュール化のデメリット はじめに LSLでは巨大なプログラムを作ることができません。 というのも一つのLSLのサイズは16KByteまでという制限があるためです。 この制限は、スクリプトコードの本体のサイズだけでなく、スクリプトが動作したときのメモリを含めたサイズです。 スクリプトを正しく書いていても、サイズが大きくなって16KByteの制限を越えてしまうと、 「St...
  • llListSort
    llListSort list llListSort(list src, integer stride, integer ascending) リストsrcを並び替える。 引数ascendingがTRUEだった場合は降順、FALSEだった場合は昇順に並ぶ。 strideは「リストのグルーピング」を指定する引数である。 llList2ListStrided関数の説明を見ていただくと、ストライドのイメージが多少なりともわかるかと思う。 リスト型というのは通常、一列にデータが並んでいる構造であるが、ストライドを使うことで行列的に扱うことができる。 通常のリスト  [1,2,3,4,5,6,7,8,9....] ストライド(3つずつの場合)  [1,2,3,   4,5,6,   7,8,9   ....] 上記のように、ストライドに3を指定した場...
  • llSetColor
    llSetColor llSetColor(vector color, integer face) 引数faceで指定した面の色を引数colorで指定した色にする。 色の指定はvector型で行うが、値の範囲は 0.0, 0.0, 0.0 ~ 1.0, 1.0, 1.0 となる。 3つの要素のうち先頭からRed、Green、Blueの色要素の指定となっている。 Webページ等の色指定で一般的なRGB形式は0~255の範囲で色要素の強さを指定するが、LSLでは0.0~1.0の範囲なので注意すること。 0~255の色要素をLSL用に変換するには、255で割り算してやれば良い。 一般的なRGB形式の指定値との対比を参考までに掲載しておく。 0~255 16進数 LSL 0 0 0 64 40 0.25 128 80 0.5 192 C0 0.75 255 FF 1...
  • llDetectedLinkNumber
    llDetectedLinkNumber integer llDetectedLinkNumber(integer number) タッチもしくは衝突イベントがどのprimにおいて起こったのかを取得する。 戻り値はリンクナンバーである。 例えばタッチイベント内で使用した場合は、タッチされたprimのリンクナンバーを返す。 衝突イベント内であれば、衝突したprimのリンクナンバーを返す。 オブジェクトが単一primの場合は、戻り値は0である。 2つ以上のprimがリンクされていた場合、ルートprimは1、2以降は子primとなる。 この関数はタッチイベントもしくは衝突イベント内でしか効果がない。 llDetectedLinkNumberはデテクト系の関数の一つである。 デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第...
  • 何ができるの?
    はじめに スクリプトって何だ? スクリプトで何ができるのか はじめに 日本語によるスクリプトの解説記事が少ないという嘆きの声がしばしば聞こえてくるので、微力ながらスクリプトについて基本的なところから書いてみようと思います。 想定している読者は、スクリプトの知識が無い初心者さん。 加えて、プログラミングの知識も無いことを考慮しておくつもりです。 わかりやすく書けると良いのですが(^^; スクリプトって何だ? ワールド内に存在するほとんど全てのものをプレイヤーが製作するのがSLですが、一口に「ものづくり」と言っても、いくつかの分野があります。 一つには、建物や家具、置物、アクセサリーなどの小道具の製作。 これはprimというワールド内の物体を組み合わせることで形を作ります。 一般的にはbuildと呼ばれ、SLのモデリングツールに習熟することが必要な分野です...
  • 衝突判定
    はじめに 衝突イベント 衝突版自動ドア 今回のポイント 最後に はじめに 初級スクリプトとして触れておきたい事項も最後となりました。 最後に扱うのはオブジェクトの衝突についてです。 物理オブジェクトを扱いだすと、いろいろな場面で衝突判定をしたりするのですが、通常のオブジェクトにおける衝突判定も実は結構有用です。 例えば以前、センサーを利用した自動ドアを作りました。 あのスクリプトは衝突を用いて書き直すことが可能です。 衝突・・・なんていうと猛スピードで激突するイメージかもしれませんが、lslで言う衝突はもっと軽いものも含みます。 例えばアバターが歩いてきてオブジェクトを踏んだとき、それだけで衝突のイベントが起きるのです。 自動ドアの前にマットを用意しておいて、それを踏んだらドアが開く、という古典的な仕掛けが実現できます。 実際に衝突を使った自動ド...
  • カメラ制御
    はじめに カメラコントロールllSetCameraEyeOffset(vector offset); llSetCameraAtOffset(vector offset); 定点カメラスクリプト 今回のポイント はじめに 最後に衝突について説明して初級スクリプト講座を終えようと思っていたのですが、最近、カメラのコントロールが意外に面白い効果を出せることに気づいたので、今回はカメラの制御について書きたいと思います。 SLで言うところのカメラとは、「視点」のことです。 通常、SLの視点はユーザーが自由に動かすことができます。 ALTを押しながらアバターを左クリックすると、そのアバターに注目したりもできますね。 結構自由なカメラコントロールが許されていて、私のように趣味でムービーを作る者にとっては重宝しています。 スクリプトからカメラをコントロールする方法も用意さ...
  • llGetPrimitiveParams
    llGetPrimitiveParams list llGetPrimitiveParams(list params) primの属性値を返す。 引数paramsには取得したい属性のリストを指定する。 戻り値は引数に指定した属性に応じたリスト型のデータとなる。 基本的に、buildツールを使って指定可能なprimの設定値は全てこの関数を使用して取得できる。 また、この関数の戻り値を使ってllSetPrimitiveParams?関数を実行すると、buildツールと同様にprimを編集することが可能である。 これはつまりbuildの自動化が実現できることを意味する。 鏡面コピースクリプトなどは、この関数を使ってコピー元のprimの属性値を取得し、必要なパラメータに鏡面変換をかけた後、llSetPrimitiveParams?関数でコピー後のprimを形成する。 ...
  • llGetCreator
    llGetCreator key llGetCreator() オブジェクトの製作者のUUIDを得る。 製作者とはオブジェクトを作成した人であり、オブジェクトのオーナーとは必ずしも一致しない。 名前 コメント
  • 初!スクリプト
    はじめに スクリプトの作成 ハロー・アバター・スクリプト 本当にそうなってるのか? はじめに 前回はスクリプトの構成について説明しました。 「状態(ステート)」 「きっかけ(イベント)」 「反応」 の3つで構成されているという点は基礎中の基礎ですので踏まえておいて下さい。 今回は実際にSLの中でスクリプトを動かしてみたいと思います。 だらだらと説明ばかりでは飽きるでしょうし(^^; スクリプトの作成 SLにログインし、実際に作ってみましょう。 スクリプトの作り方は、厳密には2つの方法があります。 primのコンテンツ内に作る方法と、アバターのインベントリ内に作る方法の二種類ですが、たいていの場合はprimのコンテンツ内に作成します。 何故ならスクリプトはprimのコンテンツ内に置かないと作動しないためです。 汎用的なスクリプトを作る場合な...
  • llMD5String
    llMD5String string llMD5String(string src, integer nonce) 文字列srcをMD5(Message Digest Algorithm 5)でハッシュ値に変換する。 MD5とはハッシュ値を作成するためのある処理方式の名前。 しばしば、ダウンロードデータ等が改ざんされて無いかどうかを判定するために使われる。 詳しいことをここで説明するのは少々筋違いなので興味のある方は調べてみて下さい。 あくまでも関数の機能として述べるなら、llMD5String関数は文字列srcを"2cfa746974210d68e96ee620bf842fb6"のようなデータ(ハッシュ値)に変換する。 変換後のデータ(ハッシュ値)から元の文字列を求めることは出来ない。 ...
  • llCollisionSprite
    llCollisionSprite llCollisionSprite(string impact_sprite) 衝突時のパーティクルを設定する。 物理オブジェクトを地面に落としたときなど、何やら火花っぽいものが飛び散ったりするが、あれが衝突時のパーティクルである。 この関数を使うと、衝突したときにハートが飛び散る矢とか、なんか変なものを作ることができる。 引数impact_spriteにはパーティクルに使用するテクスチャ名またはUUIDを指定する。 テクスチャ名で指定する場合、オブジェクトのコンテンツ内にテクスチャが入っていなければならない。 impact_spriteに""(空文字)を指定した場合はデフォルトのパーティクルに戻る。 衝突時のサウンドを設定するにはllCollisionSoundを使う。
  • 基礎知識/関数とは?
    関数 一般的に関数と言うと、 y = ax + b こんなのを思い出すかと思います。 中学校あたりの数学で出てくる「一次関数」というヤツですね。 これ、要するにxの値が変わると、それに関連してyの値も変わることから、「関数」と言われるんですね。 この数学用語を英語で言うと「function(ファンクション)」です。 ファンクションの意味を『新英和中辞典 第6版 (研究社)』で調べてみると、 1 機能,働き,作用,目的 2-a 職務,職能,職分,役目 b 【文法】 機能 3-a 儀式,行事; 祭典,祝典 b 《口語》 (規模の大きい)社交的会合,宴会 4-a 他のものに関連して変化するもの 《性質・事実など》, 相関関係 b 【数】 関数 こんなんが出てくるわけです。 最近のプログラムで“ファンクション”と言うと...
  • 音を鳴らそう
    はじめに サウンドを扱う関数 音の出るドア ループサウンド 今回のポイント はじめに 今回のスクリプトは簡単です。 サウンドの再生についてはもっと早くに取り上げるべきでしたが、ついつい後回しになってしまいました(^^; オブジェクトにちょっとした音を組み込むことは、簡単なわりに効果的です。 例えば照明のON/OFFをするときにスイッチ音を付けたり、アニメーションと一緒に効果音を付けたりするだけで、よりリアルで面白いものを実現することができます。 基本的にはスクリプトで実現できる音とは、効果音のことだと思ってください。 BGMのような長いサウンドを鳴らすことは容易ではありません。 というのも、SLにアップロード可能なサウンドは10秒以内に限られているためです。 今回は簡単な例として、以前作ったドアのスクリプトに、開閉の音を組み込んでみたいと思います。 ...
  • 基礎知識/フロー制御とは?
    フロー制御 フロー制御というのは、条件によって実行するコードを変えたり、繰り返し処理を行ったりするものを言います。 プログラムの処理の流れ(フロー)をコントロールするものなので、「フロー制御」と呼ばれます。 まずはフロー制御の種類を挙げておきます。 フロー制御 説明 if-else 条件分岐。条件に応じて実行するコードを変える。 whle ループ処理。条件を満たす間延々と繰り返し処理を行う。 do-while ループ処理。処理を行った後、条件を満たす場合は繰り返す。 for ループ処理。条件を変化させながら繰り返し処理を行う。 return 復帰(リターン)。ユーザー関数やイベントを終了する。 jump ジャンプ。指定したコードの行に処理を飛ばす。 state ステート。LSLのステートを変更する。 if-else フロー制御の中でも最も使用頻度が高いのがif...
  • llPreloadSound
    llPreloadSound llPreloadSound(string sound) 引数soundで指定されたサウンドをプレロード(再生準備)する。 あくまでもサウンドを準備するだけであって再生は行われない。 サウンドがオブジェクトコンテンツ内にあれば引数soundは名前を使って指定可能。 コンテンツにないならUUIDを指定する。 この関数の実行には1秒かかる。 詳細な仕組みは知らないが、SLにおいてサウンドを耳にする場合、クライアントはサウンドデータをダウンロードしてくることになる。 これは裏方作業なので、ユーザーが通常意識することはない。 一つのサウンドが10秒までに制限されているのは、クライアントがサウンドをダウンロードする際の時間が比較的短時間で済むという理由もあるだろう。 しかしながら、10秒に制限されているとは言ってもサウンドデー...
  • @wiki全体から「照明を作ろう」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索

記事メニュー
目安箱バナー