スポンサーサイト


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

1プリムでボタン操作を実現 - プリムの1面を複数のボタンとして処理


前回、プリムの1面を一つのボタンとして処理する方法をまとめましたが、今回はプリムの1面を複数のボタンとして処理する方法をまとめてみました。

Second LifeのServer Ver.1.24.7.98039以降、Viewer Ver.1.21.4以降では、llDetectedTouchST、llDetectedTouchUVというプリムのどの座標にタッチしたか分かる関数が使えるようになりました。

二つの違いですが、

llDetectedTouchST:touch された点の、プリム面上の座標のvector値を返します。
llDetectedTouchUV:touch された点の、テクスチャ上の座標のvector値を返します。

って分かりにくいですね(笑)。

llDetectedTouchSTの方はプリム上の座標なので、プリムの面上をタッチすると、その値は一意で、0~1.0の範囲になります。

一方、llDetectedTouchUVの方はテクスチャ上の座標なので、テクスチャを繰り返し表示していると、テクスチャ上の同じ位置は同じ座標となります。(プリムの面上で同じ座標が複数現れる)
また、テクスチャをずらして表示している場合はマイナスの座標が現れる可能性もあります。

慣れないうちはllDetectedTouchSTを使った方がわかりやすいかもしれません。

今回の例でもllDetectedTouchSTを使用しました。

20091016_001
イメージをつかむために、このようなテクスチャを貼った面をボタンとして扱うと仮定しましょう。

そこにスクリプトをセットしましょう。
今回はサンプルとして、タッチしたらその面番号と座標を教えてくれるようにしてみました。

   1: default {
   2:     touch_start(integer num_detected) {
   3:         integer touchedFace = llDetectedTouchFace(0);
   4:         vector touchedpos = llDetectedTouchST(0);      
   5:  
   6:         if ( touchedFace == -1) {
   7:             llOwnerSay("Sorry, your viewer doesn't support touched faces.");
   8:         }
   9:         else if ( touchedpos == TOUCH_INVALID_TEXCOORD ) {
  10:             llOwnerSay("Sorry, the surface touch position could not be determined.");
  11:         }
  12:         else {
  13:             llOwnerSay("Face No : " + (string)touchedFace);
  14:             llOwnerSay((string) touchedpos);
  15:             // 処理をいれるなら、この下でtouchedpos.x、touchedpos.yを参照して入れるようになります
  16:         }
  17:     }
  18: }

 

プリムにタッチするとtouch_startイベントが開始し、3行目で面番号を「touchedFace」に、4行目で座標を「touchedpos」に代入します。

この時、バージョンが古いなどの理由で面番号が取得できなかった場合は、6行目の判定文にかかり終了します。
また、座標が取得できなかった場合は10行目の判定文にかかり終了します。

正しく面番号と座標が取得できたら、13、14行目で教えて終了します。

もし、ボタンの処理を入れるとすれば、15行目のコメント部分に入れるようになりますね。
「touchedpos.x」でx座標、「touchedpos.y」でy座標が分かるので、その範囲で判断していけばいいことになります。

基本的には左下が(0,0)、右上が(1.0,1.0)となりますので、今回のSSの場合は

黄色:0≦x≦0.5、0≦y≦0.5
緑 :0.5<x≦1.0、0≦y≦0.5
赤 :0≦x≦0.5、0.5<y≦1.0
青 :0.5<x≦1.0、0.5<y≦1.0

このような範囲内にあるときに各色に対応した部分が押されていると判断すればいいと思います。

「基本的」にと言ったのは、プリム編集をした際に回転していたりすると、必ずしも左下から右上に向かっているとは限らないためです。
そのため、今回のサンプルで座標の位置を確認しながら作業していくと良いかもしれません。

 

今回のやり方と、前回のプリムの1面を一つのボタンとして処理する方法を組み合わせれば、少ないプリムでボタンなどをまとめることが出来ると思います。

あまりまとめすぎてしまうと、作業的にもスクリプト処理的にも大変だと思いますが、試してみると良いかもしれません。

インワールド、Wassr、twitterで助けてくれた皆さん、ありがとうございます!
スポンサーサイト

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

タグ : セカンドライフ Second Life SecondLife

コメント

No title

すみません、一つ書き忘れてました。
このサンプルでは面番号の判定をしていないので、どの面を押しても座標を教えるようになっています。

ボタン処理をする場合は、ボタンとして使用する面番号かどうかをきちんと確認しないといけませんね。
コメントの投稿
管理者にだけ表示を許可する

FC2カウンター
プロフィール

Kagami Kohime Kagamin_Super

Author:Kagami Kohime

Second Life内では身長140cmのチビッコ。
最近みんなからは「かがみん」と呼ばれています。

これまで獲得した称号
「イベント王女」「誤爆女王」


Kagami Kohime Original Brand Shop「KagamiN-YA」もよろしくお願いします。

↓お店の位置はこちら
★音の森店

Second Life Marketplaceでのオンラインショッピングはこちらです

管理用リンク

最近の記事+コメント
最近のトラックバック
ブログ内検索
カレンダー(月別)
07 ≪│2017/08│≫ 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
カテゴリー
RSSフィード
QRコード
QRコード
メールフォーム

名前:
メール:
件名:
本文:

お遊び系のブログパーツ
★このFacebookプロフィール貼っておけば、毎回中の人男で・・・とか説明しなくて良いでしょうか・・・?
Katsumi Kenichi

バナーを作成

★ニコ動にアップした動画など


★ブログに妖精が・・・住み着いたようです・・・


★これまで入れたどのブログパーツよりも人気あるな、これ・・・


★XBox360好きなのですよ~。


★Second Lifeを起動していても、まだPCには余力があったりします。その余力をBOINCを使って社会貢献に役立ててみませんか?
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。