[[devel|English]] | [[devel_ja|日本語]]
{{ :products:m30:snapshot_080.png?nolink&500|}}
====== 開発キットについて ======
このたびは、[[::products:m30|M30]] をお買い上げくださいましてまことにありがとうございます。
M30 は単体では運転することができませんが、購入されたみなさまが追加機能を自作し、手軽に販売・配布・導入できるよう開発キットを同梱しています。
「ヘッドライトを光らせたい」「音を鳴らしたい」といった簡単な改造から、「実際に走らせたい」「SIM内を自動巡回させてみたい」といった本格的な開発まで対応できる柔軟さを持たせています。
開発キットは Trans 可能で、M30 のすべての購入者は、このキットを使って開発したものを、任意のパーミッションで販売・配布するライセンスを保持しています。
==== 開発キットの構成 ====
**developer kit for M30** ... 本体オブジェクト / Mod-Copy-Trans\\ ├ **m30drivervasepose.bvh** ... ライダー用の基本ポーズ / Copy-Trans\\ ├ **m30passengerbasepose.bvh** ... サイドカー用の基本ポーズ / Copy-Trans\\ ├ **m30tandembasepose.bvh** ... タンデム用の基本ポーズ / Copy-Trans\\ └ **vias10_core_for_m30.lsl** ... 開発用メインスクリプト / Copy-Trans\\ └ **vias10_aux_for_m30.lsl** ... 開発用補助スクリプト / Copy-Trans
vias10_core_for_m30.lsl と vias10_aux_for_m30.lsl は能動的に処理を行うものではなく、リンクメッセージの受信によって特定の処理を行うように設計されています。以下、これらのスクリプトを **VIAS**((**V**hehicles' **I**nteractive **A**dd-on **S**ystem)) と表記します。
==== 開発の前に ====
開発に先立ち、まずは、 [[analogmatic_ja|AnalogMatic for M30]] をお試しください。
これは、開発キットで何ができるのかを示すために、M30 と同時に開発した3人乗りドライブシステムです。スクリプト2つといくつかのアニメーションを追加し、この2つのスクリプトから VIAS にリンクメッセージを送ることで車体の制御を行っています。
**AnalogMatic for M30** … 本体オブジェクト\\
├ am-eg_for_m30.lsl … M30 を走らせるエンジンスクリプト\\
├ am-io_for_m30.lsl … VIAS とエンジンをコントロールするためのインターフェイススクリプト\\
├ m30driver-4.bvh\\
├ m30driver-8.bvh\\
├ m30driver-12.bvh\\
├ m30driver-18.bvh\\
├ m30driver4.bvh\\
├ m30driver8.bvh\\
├ m30driver12.bvh\\
├ m30driver18.bvh\\
├ **m30drivervasepose.bvh**\\
├ **m30passengerbasepose.bvh**\\
├ **m30tandembasepose.bvh**\\
├ **vias10_core_for_m30.lsl**\\
└ **vias10_aux_for_m30.lsl**
AnalogMatic の導入方法につきましては、[[::products:m30:analogmatic_ja|こちら]] をご覧ください。
==== リリースされたサードパーティー製品 ====
開発した商品やオプションパーツなどは、以下のページにて紹介致します。リリースされる際にはご一報ください。
===== 開発に関する情報 =====
開発キットと M30 を、[[analogmatic_ja#インストール方法|AnalogMatic のインストール]] と同じ手順でリンクします。その後、スクリプトやアニメーション、音などを追加し、スクリプトから以下の API に従いリンクメッセージを送信して車体の制御を行います。
==== VIAS について ====
VIAS は、以下の車体制御を行う基本スクリプトです。今後、anhelo が開発する車両はすべて VIAS を搭載し、同じ API 体系で車体を制御できるようにします。
* 可動部分(ハンドル、車輪など)の制御
* ライト類の点灯 / 消灯
* 各パーツの初期位置への移動
* エンジン音の再生 / 停止
インターフェイスや物理エンジンを切り離し車体制御スクリプトの仕様を規格化することで、サードパーティー開発者にとって次のような利点が生まれます。
* 一度開発したエンジンスクリプトを使い回すことができる。
* パーツの移動や回転など、難解な部分を考えずにスクリプトを開発できる。
* 造形が苦手なクリエイターでも、部分的に開発に参加することができる(例:スクリプト / 効果音 / アニメーションやポーズ / オプションパーツなど)。
また同時に、この仕組みを採用した開発者が増えることによって、製品の利用者にとっても次のような利点が生まれます。
* ひとつの乗り物で、異なる操作方法・異なる乗り心地を試すことができる。
* 必要な機能だけを選りすぐり、TPO にあわせて使い分けることができる。
==== VIAS API を使った制御情報の送受信方法 ====
送受信はすべてリンクメッセージで行います。
integer ApiVersion;
SendAPICommand(string command, integer value){ // 送信
llMessageLinked(LINK_ROOT, value, command, "");
}
default{
state_entry(){
SendAPICommand("VERSION", 0);
}
link_message(integer sender, integer value, string response, key id){ // 受信
if (response == "VIAS-M28"){
ApiVersion = value;
}
else if (llGetSubString(response, 0, 3) == "VIAS"){
llSay(0, "【ERROR】この車体には対応していません");
}
}
}
^ API ver. ^ command ^ value ^ 説明 ^
| 1.0 | VERSION | --- | API バージョンを問い合わせます。問い合わせに対し、以下の返信が行われます。\\ response = "VIAS-M30" ... LINK_THIS に対し、value にバージョン番号を10倍した値を代入し返します。ver.1.0 の場合は value = 10 が返ります。|
| 1.0 | RESET | 0 | ソフトリセット。 VIAS の保持する車体制御に関する変数を破棄し、以下の初期状態に戻す。\\ LEFT = 0\\ SPEED = 0\\ GEAR = 0\\ PARKING = 1|
| ::: | ::: | 1 | ハードリセット。 VIAS そのものを再起動する。このコマンドにより、VIAS はインストール作業を開始し、各リンクプリムを正常な位置に移動・回転します。リセット後、以下の返信が行われます。\\ response = "SEAT" ... LINK_SET に対し、value にシート((子プリムのオブジェクト名も SEAT))の[[#seat_について|リンク番号を代入して返します]]。同乗者の着座位置を [[http://wiki.secondlife.com/wiki/LlLinkSitTarget|llLinkSitTarget()]] で指定するときなどに使えると思います。\\ response = "INIT" ... LINK_SET に対し、value に、正常にインストールが完了したかどうかのブーリアンを代入して返します。|
| 1.0 | ENGINE | 0 | エンジン音を止めます|
| ::: | ::: | 1 | エンジン音を再生します|
| 1.0 | TEXT | 0 | フローティングテキストを非表示にします|
| ::: | ::: | 1 | フローティングテキストを表示します|
| 1.0 | LEFT | -200 〜 200 | Tハンドルを左に回転し、その回転角度にあわせて前輪を動かします。 例えば、ハンドルを右に 12.7度回転させたい場合は value = -127 となります。|
| 1.0 | SPEED | -100 〜 100 | フローティングテキスト内のスピード値を変化させます。また、数値にあわせてタイヤの回転((テクスチャーアニメーション))スピードが変化します。スピード値がマイナスの間は、GEAR は R と表示されます。VIAS 自体は物理エンジンを搭載していないため、実際に動かすためには別途物理エンジンが必要です。|
| 1.0 | GEAR | 0 〜 4 | フローティングテキスト内のギアの値を変化させます。また、シフトレバーを所定の位置に動かします。|
| 1.0 | LOW | 0 〜 1 | もう片方のシフトレバーを所定の位置に動かします。|
| 1.0 | SUS | 0 | 走行中のフロントサスペンションを固定にします|
| ::: | ::: | 1 | 走行中、地面の凹凸によってフロントサスペンションを動かします|
| 1.0 | PARKING | 0 | フローティングテキスト内のパーキングブレーキをオフにします|
| ::: | ::: | 1 | フローティングテキスト内のパーキングブレーキをオンにします|
| 1.0 | LIGHT | 0 | ヘッドライトを消灯します |
| ::: | ::: | 1 | ヘッドライトを点灯します |
| 1.0 | BRAKE | 0 | ブレーキランプを消灯します|
| ::: | ::: | 1 | ブレーキランプを点灯します|
| 1.0 | SHADOW | 0 | 影を非表示にします|
| ::: | ::: | 1 | 影を表示します|
==== SEAT について ====
VIAS は次のように、2つのリンク番号を同時に送ります。
integer LinkNumber4Sidecar;
integer LinkNumber4Tandem;
llMessageLinked(LINK_SET, LinkNumber4Sidecar<<8|LinkNumber2Tandem, "SEAT", "");
そのため、以下の要領で2つの数値を取り出してください。
link_message(integer sender, integer value, string response, key id){
if (response == "SEAT"){
integer LinkNumber4Sidecar = value>>8&255;
integer LinkNumber4Tandem = value&255;
}
}
===== 開発したものを販売・配布するにあたって =====
==== 製品名について ====
特に「anhelo」「VIAS」といった語句を製品名に入れる必要はありません。お好きな名前でリリースしてください。
==== キット内に含まれるポーズについて ====
ポーズが2つ入っていますが、これはサンプル程度のものとお考えください。必ず使う必要はありません。必要ない場合は、販売・配布時には削除した状態でリリースしてください。
==== パーミッションについて ====
開発キットにはじめから入っているスクリプトやポーズは、特にパーミッションは気にせずリリースしてください。ご自身で追加したものに関しましては、くれぐれもパーミッションにはご注意ください。また、リリースされるものは M30 とリンクできないと意味がありません。そのため、必ずオブジェクトは編集可の状態でリリースしてください。
==== 製品販売時の注意書きについて ====
開発されたオプションキットは M30 と連携してご利用いただく必要があり、M30 は anhelo でご購入していただく必要があります。このことを、商品パッケージや看板・AD などに必ず明記してくださいますようお願い申し上げます。また、M30 が購入可能な場所として、[[http://maps.secondlife.com/secondlife/Sociaria/114/98/34]] まで誘導していただけますと助かります。ご協力の程、よろしくお願い申し上げます。
==== 販売開始する際のお願い ====
開発したものを販売・配布する際は、ご連絡いただけましたら、以下の手段を使い微力ながらこちらからも広報活動に努めます。
* インワールド グループ
* インワールド サブスクライバー キオスク
* 当ウェブサイトの[[::products:m30:3rd_party_showcase|商品ページ]]
* twitter / facebook など SNS
* anhelo 本店から開発者さまの販売場所への誘導
つきましては、できるだけ以下の内容をお知らせくださいますようお願い申し上げます。
* 販売場所(SLURL)
* 開発した製品の概要
* 価格
* デモの有無
* 販売責任者のアバター名と、販売ブランド名