QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
プロフィール
織原瑞希
織原瑞希
オーナーへメッセージ

  
Posted by at

2020年04月12日

飛行機のスクリプト

皆さんこんばんは、コロナウイルスに翻弄されつつ、あーでもないこーでもないと、模索を続けているみずっちです。
ブログ記事を書けるだけの時間がなかなか確保できず、Twitterでちょこちょこっとしたことをつぶやくだけになってしまっていました^^;
久しぶりに、ちょっとしっかりとした記事にしてみたいと思います。

今回のテーマは、スクリプトを書くに当たっての、行数節約というか、「効率のよい書き方」を、私なりに模索してみた結果を少し書いてみましょう。

※今回、IF・ ELSE IF ・ELSE の構文の使い分けに関しては省略し、IFに統一して記述しています。
必要に応じての使い分けに関しては、またの機会に改めて記事にします。




SLの中では、飛行機に限らず乗り物に乗り込んで、スタートさせる際に、「start」とチャットに書き込んで、チャットコマンドという形式でスタートさせる物が多いですね。
車、バイク、飛行機…。SL内の多くの乗り物がこの方式を採用しています。
これらの乗り物の場合、降りるときは、「stop」と打ち込んで、エンジンなどを止めてから降りないと、消えてしまったりするものも多いと思います。
(これは運転手が居なくなった乗り物が、勝手に変なところへ迷い込まないために、「臨時」属性が入るようにしてるからが、ほとんどでしょう。)

それと同時に、打ち込む文字数という手間を減らすために、「s」の一文字だけで、エンジンのオンオフが出来るものも多いと思います。
これはたとえば、

チャットで「s」と入力されたことを確認すると、「A」という箱の中身に1加算。
Aの中身が1のときは、エンジンON
Aの中身が1以外の時は、Aの中身0にしてから、エンジンOFF

という動作をさせることで、うまく機能する仕組みになっています。

if (msg=="s") //もしメッセージが「s」なら
 {
 ig += 1;   //igに+1
 if (ig !=1)  //もしigが1以外なら
  {
   ig = 0;   //igを0にしてから
   (エンジンオフにするプログラム)
  }
 if (ig==1)  //もしigが1なら
  {
   (エンジンオンにするプログラム)
  }
 }


と、こんな感じですね。
ただ、このままの場合だと、チャットコマンド「start/stop」によるエンジンのオンオフとは、別個に制御することになってしまい、


if (msg=="start")  //もしメッセージが「start」なら
  {
    (エンジンオンにするプログラム)
  }
if (msg=="stop")  //もしメッセージが「stop」なら
  {
    (エンジンオフにするプログラム)
  }
if (msg=="s") //もしメッセージが「s」なら
  {
   ig += 1;   //igに+1
   if (ig !=1)  //もしigが1以外なら
  {
   ig = 0;   //igを0にしてから
   (エンジンオフにするプログラム)
  }
   if (ig==1)  //もしigが1なら
  {
   (エンジンオンにするプログラム)
  }
 }


みたいな書き方をしないとダメなの?なんて考えてしまうひとも居るかも知れません。
(まぁ皆さん私なんかより十分アタマは良いでしょうから、すぐに気がついた人も多いかもですが。)

この書き方だと、同じことをわざわざ丁寧に書いているだけで、却って、間違えていたり、別な機能を加えたり書き換える場合にも、
書き換えないといけない部分が増えて、ミスが増える元にもなりかねません。
なにより、「start/stop」で操作した際、変数igの値に変化を与えていないので、オンオフのスイッチが中途半端な挙動になってしまいます。

そこで、とりあえず「オンにする、オフにする」部分を切り離して一つのプログラムにしてしまい、
「チャットコマンドで受け取った内容に応じて、オンオフさせるのに必要な情報を橋渡しするだけ」にします。





ignition()
{
if (ig !=1)  //もしigが1以外なら
 {
   ig = 0;   //igを0にしてから
  (エンジンオフにするプログラム)
 }
  if (ig==1)  //もしigが1なら
 {
  (エンジンオンにするプログラム)
 }

}


というプログラムのひとかたまりを用意してあげれば、

if (msg=="start")  //もしメッセージが「start」なら
 {
  ig = 1;   //igを1にしてから
  ignition();   //ignition()を実行
 }
if (msg=="stop")  //もしメッセージが「stop」なら
 {
  ig = 0;   //igを0にしてから
  ignition();   //ignition()を実行
 }
if (msg=="s")  //もしメッセージが「s」なら
 {
  ig += 1;   //igに+1
  ignition();   //ignition()を実行
 }


こちらのプログラムでは、チャットで受け取った内容に応じてigに入っている数字を変化させるだけでよくなります。
これで、オンの時、オフの時に関して命令する部分をダブって書く必要がなくなり、手入れする際に片方しか修正してない。みたいな些細なミスも減ります。
同じことを何回も書くくらいなら、その部分は一個のブロックにして、使いまわしする。」という、基本スキルですね。

プログラムというのも、やっぱり普段から書かないでいると、ノウハウを忘れてしまいがち。
スポーツ選手が毎日練習するように、レストランのシェフが毎日包丁を持つように。

これからも少しずつ、こういった基本スキルも、思い出しながら、紹介して行ければ良いなー。と思っています。


















  

Posted by 織原瑞希 at 17:58Comments(0)セカンドライフ

2020年03月18日

さくらまつり(((8-(ノ ・ω・)ノ✿

みずき工房さんと,おいらん堂さんが合同で,桜まつりを行うようです。

以下http://mizukikoubou.blogspot.com/からの要約です。

(開催期間)
2020/3/20(金)~2020/4/12(日)※日本時間(JST)
(会場)
阿浦八幡宮の境内(ApodaSIM)
http://maps.secondlife.com/secondlife/Apoda/107/176/50


*主なイベント*
●おいらん堂 金曜ダンスパーティー
 ・DJ:Asuka Littlebird  DM:ずー華
 ・3/20・3/27・4/3・4/10 (いずれも金曜) 22:00~23:00(JST)

●ささやかなダンスパーティー
 ・音出し係:有志もしくはラジオ  DM:Dance Ball
 ・3/26・4/2・4/9(いずれも木曜) 21:30~23:00(JST)

●仮設商店街
 ・2020/3/18(水)~2020/4/12(日)
 (みずっちも飛行機置かせてもらってます♪)

ほか突発イベント:未定
※事情により,変更がある場合もあります。  

Posted by 織原瑞希 at 17:20Comments(0)

2020年03月12日

SecondLifeのスクリプト

皆さんこんにちはー。
コロナウイルスの問題に苛立ちやら不安やら、一喜一憂したりしながらも、
気ままにSL生活を続けているみずっちです♪ (((8-(ノ ・ω・)ノ

近日中に、別途お知らせ出来ると思いますが、いま、アキバにお店を建築中です♪
インワールドでは、何箇所かにLM看板置かせてもらったりもしているので、探してみてください。
(AkibaSIMに来ることさえできちゃえば、わりとすぐ見つかるかもですが)

さてさて、今回はスクリプトのお話。
みずっちが今作っているT-4と天山。この2機はどちらも、フリー配布で見つけてきた飛行機に入っていた「LFR2.0」というスクリプトを参考に、
色んな人の意見やヒントをもらって、なるべく自力で書き上げたものです。

LSLスクリプトの各種説明のページや、佐藤しおさんの記事を見ていただければ、詳細にかかれていますので、
今回はもっと初歩的なところから、簡単な範囲で説明できればと。

「プログラムを書くのって、けっこう難しそう…」って思う人、結構多いかも知れません。
計算もたくさん出てくるし、英語のようでまたちょっと違う、呪文みたいなのがいっぱい出てくるしで、
確かに、覚えておかないといけないことは結構多いかもです。

その呪文の中身、カラクリを少しずつ覚えていけば、最初から色んなことを出来るようなプログラムを作るのは無理でも、
楽しく、出来ることが増えていって、ちょっとした魔法使い気分を味わえるようになると思います。

ドコかインワールドのサンドボックスで、制作ツールでプリムを出して、その中身に「新しいスクリプト」を作ってみてください。







新しいスクリプトを開いて、編集してみようとすると、中にはすでに、何か書かれています。

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


上から順に見ていって見ましょう。
default デフォルト…英単語が読めれば、予想できるかも知れませんね。
「朝ごはんは目玉焼きにウィンナーはデフォでしょ。」なんて文例で良いのかわかんないけど、そのデフォと同じ意味です。
スクリプトが動き始めるとき、このdefaultが書かれている部分から動き出すので、
「スタート地点を示すもの」と思ってもらえれば良いと思います。

 は、とセットになって、ドコからドコまでが一つのプログラムなのかを示しています。
プログラムを梱包する箱みたいな感じですかね。
大きい箱の中に中くらいの箱、その中に小さい箱。という感じで、入れ子になっています。

state_entry…直訳すると「状態を登録」とか、そんな感じでしょうか。
これは、スクリプトが入った物をおいたり、身につけたりしたときに、これから始まるいろんな動作にそなえて準備する部分。
「スマホの電源を入れてから、待ち受け画面が出るまでに、スマホが裏で準備を頑張ってる部分。」とでもいえば良いのかな?

llSay(0, "Hello, Avatar!");
ここは一行分、一気に行ってみましょう

Say:言うに、LL(SecondLifeの運営、Linden Labの頭文字)を加えてあります。
( ) の中身は、 "Hello, Avatar!"で、 " "でくくられた中身をチャットに表示し、
その前の0で、チャットの有効範囲(チャンネル番号0番=近くに居る人)を指定しています。
設定するものの区切りは「 , 」。表示させるチャンネルと、表示させる内容ですね。
行の終わりにあるセミコロン;は、{}の中での、プログラムの一区切り。各行の終わりにほぼ必ずと言っていいくらい付けますので、お忘れなくー。

いったんここでカッコを閉じて、次の{}を使っていますね。
touch_startで、誰かに触られたらスタートする部分を書いていきます。

llSay(0, "Touched.");

ここで行っていることは、state_entry()でのときと、チャットに表示する内容を変えているだけで、ほぼ全く同じ。
電源が入ったらと、触られたらとで、動き出すきっかけが違うだけ。ですね。


ここでは計算したりはまだ出てきませんが、もちろん色んな計算をしたり、スクリプトで出来ることはたくさんあります。
ただ、いきなり大きいスクリプトを覗いて見ても、複雑に色々書いてあって、何がなんだか分からない人がほとんどでしょう。

大きなプログラムでも、一個一個の小さなプログラムの集まりです。
その一個一個がどんなことをしているのか、調べてみることから始めると、カラクリが分かってくると思います。

  

Posted by 織原瑞希 at 15:55Comments(0)セカンドライフ

2020年03月03日

メッシュの物理形状

みなさんこんにちはー。

ちょっと久々になってしまいましたが、マイペースにモノ作りチャレンジに邁進中のみずっちです♪
先日から作っているT-4練習機に続いて、天山という戦時中の飛行機の制作に取り掛かってみています。

が…メッシュをアップして、形に組み上げて、とりあえずでT-4からスクリプトを移植するも…。
飛んでくれない…!
スクリプトエラーのメッセージには、
物理形状が大きすぎ。物理演算コスト32になるよう作り直せ(意訳)」とのお達しが。

(当初このスクリプトエラーの真意がわからず、グーグル翻訳しつつ、LSLポータルのページを色々漁ってました。)
どうやら、昔から長いことSLにいる方々にはわりと常識のようで、メッシュなどで乗り物などのモノ作りをするに当たっては、重要な基礎なのだとか。


そこで、部分的に物理メッシュを別途用意し、アップロード時に組み合わせることで、最適な形状、かつ低負荷な物理形状にすべく、モデリング。

物理形状タブの手順1のところで、先程別途用意したモデルを選択。


こうすることで、当初9.8あった物理コストが…


1.48まで抑えることに成功ー。

今までアップロードしてきた、歴代モデルを比較してみます。



第一世代は、主翼も尾翼も一体成型で、物理のことなど念頭になかったので、大きく単純な形状が充てがわれていました。
大きくてもシンプルな形状な分コストは一番小さい16.8。


第二世代は、当たり判定ということでメッシュの形状を主翼尾翼ボディーなど、各部で分離するも、物理コスト管理のことをまだ知らず、
なんと結構ギリギリの27.9…!
よく飛んでましたねぇ…w

そしてこの頃、天山の制作を開始し、メッシュを上げて組んで、T-4用のスクリを移植して飛ばしてみようとしても例のエラーでうまく行かず、
模索が始まります。ここでもし、先にT-4でこういったことに気がつければ、もっと対策は早かったはず。


急遽ボディーに物理形状を組み込んだモデルを用意、アップロードして機体に組み上げてみます。
外観の視点距離ごとの詳細度合い、いわゆるLODは、第二世代から採用している100%>60%(=50%)>50%>25%という設定、
17.7まで物理コストが下がっていますが、コレは逆に単純化のしすぎで、当たり判定が小さくなってしまい、
(T-4に武装は基本させませんが、)Viceなどで武装対応させた際に、チート機扱いされかねません。
そんなこんなで行き着いたのが、一番最初の画像のような形状。


テクスのほうがまだですが、物理コストは18.4と、割と良い範囲に収まっています。
また、主翼など各部の物理形状の見直しも進めれば、もっと効率のよい機体に仕上がってくれるはず。

スクリプトに関しても、また機会を見て、書いていこうと思いますー。

大変長い記事になってしまいました。ではまたー。


  

Posted by 織原瑞希 at 19:21Comments(0)セカンドライフ

2020年02月25日

テストフライト!

みなさんこんにちはー。

静香さんたちのところに、あんまり顔出せてないのが、ちょっと気がかりな今日このごろ。

というのも、やっぱり原因はこいつです。

なかなか、納得行く乗り味にならなくて、調整を繰り返していまして。
車輪、ランディングギアの自動化のプログラム書き直しや、フラップやラダーなどの可動部ギミックも、一応準備は進んでいますが、次の段階に行くまで、もう少し時間を要しそうです。

https://youtu.be/VC6yJUaD1HU

ネタが乏しいから。というのも変ですが、今回はその合間に試していた、キャプチャー動画を掲載してみます。
キャプチャ撮影をしながら、新しい設定での乗り味確認をしながら。2つの意味での、テストフライトですね。



今回、暫定バージョンではありますが、現段階の仕様でお試し版として、期間限定ではありますが、
Yumix Pradaで開催中のワゴンセールにて、350L$にて販売してみております。
ラジコンの方も、配布していますので、よろしければ、乗ってみた、遊んでみた感想をいただければ嬉しいです。  

Posted by 織原瑞希 at 14:43Comments(0)セカンドライフ

2020年02月22日

にぎやか静カフェ!

皆さんこんばんはー。

本日も、静カフェさん、賑わってますー。

昨日と今日、1枚ずつー。
私も居ますー♪
静カフェダンシング




  

Posted by 織原瑞希 at 21:54Comments(0)セカンドライフ

2020年02月14日

ラジコン飛行機ー♪

こんばんはー。
先日作って配布した、T4練習機の置き物が、ラジコンになりました…!

静カフェさんロアナプラ他数カ所で、それぞれのGroup限定になりますが、配布しています。
よかったら探してみてください。



REZした機体にタッチすると、権限確認が出ますのでOKしてください。
W/A/S/Dキー、または上下左右と、
E/C、またはページアップ/ページダウンで操作出来ます。
操縦はちょっと慣れが要るかもです。

機体に再タッチすると、アバター自身があるけるように戻ります。  

Posted by 織原瑞希 at 19:49Comments(0)セカンドライフ

2020年02月13日

復活、そして、物作り。

皆さんお久しぶりです。
前回記事が年明けアタマの2020/01/05だったので、
まる一月以上空いてしまいました…w

時折オンボードグラの産廃スペックなPCで、無理やりログインしていましたが、踊るも飛ぶも思うように行かず、
だいぶもどかしい気持ちでいました。

グラフィックボードに関してなのですが、ざっくり経緯を言いますと、
2019/12/23…夕方にグラボさん御亡くなり。

翌日…代替用のグラボを某オークションで落札し、
2019/12/26…到着したので装着、しばらく調子復活したように見えるも、5時間ほどでご臨終…。

2020/01/05…今度は大手ショッピングサイトで購入手続きするも、
一向に届く気配がなく、確認取ったら、
2020/01/29…「中国のコロナウイルスの影響で出荷できないので、返金させていただきました。」との連絡が。
2020/02/03…国内在庫のちゃんとありそうなものを、ふたたび大手ショッピングサイトで購入、
2020/02/06…やっとまともな状況に…!

当初使っていたグラボが560Tiで、最終的に載せ替えたのが750Ti
グラボさん自体の消費電力は、DTPという値で概ね60-70w前後ということらしいので、
560Tiの170w-180wと比較すると、1/3近い省エネ性能が期待できるみたいです。

もともとのマザーボードやCPUが古いので、恩恵は僅かですが、一応動画変換のNVencも機能している様子。

そして、物作り。

T4練習機を、Blenderなどを使ってモデリング、
しおさんの記事などを参考に、飛べるようスクリプト(プログラム)を組み込んでみます。

Purple Wing AirField (Yumix Square)
にて、むくたんさんが配布しているT4と並べて比較してみました。



プラモの取説や、そういった割とすぐ収集できる資料から起こしたのですが、再現度はそれなり…?





ブルーインパルス塗装の、小さめの置き物バージョンも出来たので、こちらは試しに、10L$で販売してみることに。

需要があるかはわかりません…。それになにより、飛ぶために作ったモデルを縮小してるだけなので、LI値など色々重めです…。
置ける場所がそんな無いかもですが、よろしければ♪
  

Posted by 織原瑞希 at 16:22Comments(0)セカンドライフ

2020年01月05日

グラボさんの到着待ちと、Twitter。

みなさん、こんばんはー、お世話になっておりますー。
新年、あけましておめでとうございますー。どうぞ本年もよろしくお願いいたしますー。

さてさて。表題の通り、一応代わりのグラボさんの購入手配が一段落、発送もされたとのことで、到着待ちです。

ヤフオクで落とした中古の「GTX650」ですが、
動いてくれるかもそうですが、SecondLifeの画質的に、前までの「GTX560Ti」と、どのような変化があるか、果たして…。

でもって、Twitterの方ですが、新年に合わせて、幾つか有るアカウントの一つを、SecondLife用に作り変えました。
@mizuki_orihara

よろしければ、フォローしてやってくださいまし♪

取り急ぎ。ではまたー。  

Posted by 織原瑞希 at 20:12Comments(0)セカンドライフ

2019年12月31日

年末ハプニング

みなさん、こんばんはー。
今日は大晦日、2019年最後の日ですね。

前回の飛行機の記事を書き上げてからというもの、トラブル連発で色々アタフタしてました。
今も、結局トラブルから抜けきってないのですが、ひとまずお詫びをかねてそのへんを記事にします。

前回記事をあげた23日の夕方、グラボさんが御亡くなりになりまして…。
やむなく、オンボードのグラフィックで、無理やりSLにログインしている状況です。

静カフェさん(リニューアルして「静かふぇダンシング」となりました)で、DJをするにも、PCのRAMがギリギリで、ちょっとヒヤヒヤしながらだったり、
飛行機はもはやしばらくお休みな感じです。

年明け、金融機関とか諸々が落ち着いた頃、グラボの調達を考えていますので、ブログの更新も今しばらくはお休みな感じです。

新年から、またSL内で挑戦してみたいことも、幾つか考えているので、皆様どうぞよろしくお願いいたします。

2019年、大晦日。おりはらみずき。  

Posted by 織原瑞希 at 19:00Comments(0)セカンドライフ