非物理の飛行機

物理を使わない乗物の第3弾。小型飛行機と水上飛行機とをリリースしました。JOG内 Shinobar Annex スクリプトの館で無料配布しています。試乗は同じくJOG内の Canyonでできます。

操作法はヘリコプターや潜水艦とは異なります。[Page Up]/[Page down]はエンジンパワーのアップダウン。上下矢印(↑↓)は機首の上げ下げとなります。下矢印(↓)で機首が上がり上矢印(↑)で下がるので、慣れないと反対の感覚になるかもしれません。小型飛行機は宙返りができます。水上飛行機は動きを少し抑えてます。

乗り込むとカメラは機体を後方から眺める視線となりますが、機体をタッチすると機内にカメラが移動します。コックピットの操作パネルをタッチするとスモークが出せます。

スクリプトはシノバーのオリジナルです。コピー、改変可なので、別の機体に組み込むなど自由にお使いください。

非物理の乗物はサーバーへの負担が軽く、リージョン境界でデッドロックすることなく、また楽にリージョン越えできます。ただしRezzerなどからRezされたものはそのリージョンを越えることができません。

(初稿:3 May 2018, 23:17)

Posted on 5 May 2018, 20:33 - カテゴリ: 乗物
Comments - Edit - Delete


潜水艦

非物理の乗物、ヘリコプターに続く第2弾。潜水艦をリリースしました。

艦体はハイパーグリッドの中で拾いました。Sacrariumグリッド内 The Harbour リージョンのオーナーである Lyudmila.Pavlichenko によるもの。スクリプトを入れ替えました。オリジナルでは空も飛びますが、このものは水中だけの航行に制限しています。Submarine Explorerは商用不可。Secondlifeなどには持ち込まないでください。

空中も自由に飛び回るドローンも併せてリリースしました。こちらは私が作ったもので、商用でもなんでも自由に改変、再販してもらってOKです。

どちらも Japan Open Grid(JOG)内 Shinobar Annexのスクリプトの館で無料配布しています。試乗は Shinobar Gate 北東部のサンドボックスでできます。

(初稿:23 Apr 2018, 23:20)

Posted on 19 May 2018, 0:24 - カテゴリ: 乗物
Comments - Edit - Delete


乗物を進行方向に向ける

非物理でも llSetKeyfaramedMotion を用いることで、スムースな動きを作ることができます。このときに姿勢を進行方向に合わせるにはどうするかという質問があったので、ここにその方法を説明します。

乗物が現在向いている方向 now_arrow を、移動先を向く方向 new_arrow に回転させる new_rotationllRotBetween関数を使って次のように求められます。
new_rotation = llRotBetween(now_arrow, new_arrow);

移動がX-Y平面に限られる場合は、これでOKです。

移動が上下方向にも動く場合は、やっかいな問題が生じます。上記の方法で回転させると、向きの回転に伴って乗物の前後軸(X軸)を中心にする回転、ロール(roll)が生じます。下手をすると車体が裏返しになったりしてしまいます。

ロールなしに向きだけ変えるには、まず水平(X-Y平面上)で回転させたのちに上下方向の傾きを加えるようにします。

目標地点があまりに近いときや、ほぼ垂直移動の場合に向きがコロコロ変わるのも防いでおかねばなりません。
float TOO_CLOSE = 1.0;   //meter, skip rotation

float SMALL_TILT = 0.1; //0.0-1.0, skip rotation when horizontal movement is small
vector STD_ARROW = <1.0, 0.0, 0.0>; //headding east

rotation new_rotation(vector pos)
{
vector now_pos = llGetPos();
rotation now_rot = llGetRot();
rotation new_rot = ZERO_ROTATION;
vector now_arrow = STD_ARROW*now_rot;
vector arrow = pos - now_pos;
vector h_arrow = arrow;
h_arrow.z = 0.0;
h_arrow = llVecNorm(h_arrow);
if ( llVecMag(arrow) < TOO_CLOSE ) return ZERO_ROTATION;
if ( llVecMag(h_arrow) < SMALL_TILT ) return ZERO_ROTATION;
new_rot = llRotBetween(STD_ARROW, h_arrow)*llRotBetween(h_arrow, arrow)/now_rot;
return new_rot;
}

基本は上記のようなやり方になります。これに急角度に曲がることに制限を加えたり、気球のようにZ軸の姿勢は動かさない場合とか、曲がるときにバンクを加えたりなどのアレンジはもう少し複雑になります。




Posted on 5 Apr 2018, 1:17 - カテゴリ: 乗物
Comments - Edit - Delete


ヘリの改造(2)スクリ構成

ヘリの改造(1)の続きです。

非物理のヘリコプター各プリムに入っているスクリプトとその働きを列記します。


ルート・プリム(Base)内のスクリプト
NonPhysicsHelicopter - 動きを制御するエンジン部分、メイン・スクリプトです。

sitpose - アバターの座る位置や固定カメラ、アニメーションを司るスクリプトです。座る位置、固定カメラ位置はノートカード SITCONFIG に記述します。スクリプトの変更は必要ありません。アニメはプリム内にあるものを自動的に採用します。プリム内にはアニメを一つだけ入れてください。

FollowCamera - アバターを追いかける Follow Cameraの設定はこちらのスクリプトで指定します。固定カメラの位置指定は SITCONFIG でと、それぞれ別になります。

messenger - パイロットにInstantMessageを送るとメイン・スクリプトが一時停止しますので、それを避けるために、その仕事だけをこのスクリプトが担当します。変更の必要はありません。

WaterSplash - 水中に入ったときに水しぶきを上げるスクリプト。水しぶきのテクスチャは goo です。「バシャーン」という音は、このスクリプト冒頭で指定します。

AutoReturn - 乗物を乗り捨てて一定時間経つと自動的に出発地点に戻ります。この機能が必要なければ取り除いてください。待ち時間はスクリプト冒頭で指定できます。

main propella内のスクリプト
screw texture rotator - プロペラは薄い円盤にプロペラの形をテクスチャで貼ったもの。このスクリプトはこのテクスチャを回転させます。
プロペラが1プリムの場合はテクスチャを回転させるのではなくプリムを回転させることができます。その場合は次のスクリプトに変更してください。
string KEYWORD = "engine";

vector AXIS = <0.0, 0.0, -1.0>;
integer INITIAL_RPS = 0;
float TIME_LAG = 1.0;

float last_omega = 0.0;

run(integer speed)
{
float w = 2.0*PI*(float)speed;
llTargetOmega(AXIS, (0.3*w + 0.7*last_omega), 1.0);
llSleep(TIME_LAG);
if (speed)
{
llTargetOmega(AXIS, w, 1.0);
}
else llTargetOmega(AXIS, 0.0, 0.0);
last_omega = w;
}

default
{
state_entry()
{
run(INITIAL_RPS);
}

link_message(integer sender, integer num, string text, key id)
{
if ( text == KEYWORD ) run(num);
}
}


rear propella
main propella と同じスクリプトが入っています。プリムを回転させる場合は、さきに示したスクリプトのうち冒頭部分にある AXIS を下記のように回転軸をY軸に変更したものを入れてください。
vector AXIS = <0.0, 1.0, 0.0>;


front seat, rear seat right, rear seat left
それぞれに sitposeSITCONFIG がアニメとともに、また FollowCamera が入っています。

light
LightDimmerNoTouch - ライトを点滅します。



Posted on 3 Apr 2018, 0:17 - カテゴリ: 乗物
Comments - Edit - Delete


ヘリの改造(1)部品

Shinobar Annexスクリプトの館などで入手できる非物理のヘリコプターはコピー改変可。機体を入れ替えるなど、この改造法を記します。

すでに他の乗物改造の経験のある方はご承知でしょう。機体の下部に透明なルート・プリムがあり、これがエンジンとなり、主要なスクリプトはここに入っています。上の図は「リンク部分を編集」で、このプリムの透明度を50%に変更して見せています。青色に塗ってあります。

ルート・プリム以外に子プリムにもスクリプトが入っているものがあります。それを示したものが下の図です。このヘリコプターの場合、ライトはルート・プリムである土台に埋まっており、土台部分を移動しけなければ取り出せません。

円盤状のプリムを座席の上に置いてアバターを座らせています。パイロットはロート・プリムである土台に座ることになるので、パイロット用の円盤はありません。

各プリムに組み込まれているスクリプトについては次の記事 ヘリの改造(2) をお読みください。


Posted on 3 Apr 2018, 0:01 - カテゴリ: 乗物
Comments - Edit - Delete


Pages: [1] [2]