MeltingDots Supporters
剣を作ろう
2024/09/28
Kero Nishi
Suppot Center Workshop
はじめに
昨年は拳銃を作りましたが、今年は剣を作ります。
Second Life における戦闘については、前回の解説ページ をご参照ください。
Second Life でチャンバラや殴りっこなどの近接戦闘をするには、いくつかの問題があります。
- 剣などの装着物はファントムになっているので、敵に当たっているかどうかを検出できない。
- アニメーションはローカルで再生しているため、サーバー上の位置と画面に表示される位置が異なる場合がある。(これは銃などの遠距離武器でも同じです)
- ♥ を削る llSetDamage() 関数は、物理的な衝突でしか有効にならない。
このうち、2. は Second Life の仕様上の問題なので、ユーザーがどうこうできるものではありません。
ちなみに、Firestorm では、開発者メニューの アバター・ヒットボックス にチェックを入れて、アバタの当たり範囲を表示させることができます。

開発者メニューが表示されていない方は、[CTRL] + [ALT] + [Q] で表示されます。
3. については、先ごろ実装された combat 2.0 の llDamage() 関数を使えば、同じリージョン内なら、物理的衝突がなくてもダメージを与えられるようになりました。
で、問題は 1. の当たり判定をどうするか なのでございます。
よく使われているのは、llSensor() 関数を使う方法です。
剣を振ると同時に近くのアバタを調べて、有効範囲に入っていれば剣が当たったと判定するのじゃよ。
llSensor() では自分からの距離と、角度を指定することができます。
最大値は 96m 360°ですが、これでは当たり範囲が広すぎてゲームにならないので、本日配布のスクリプトでは、3m 180°に設定しています。
(スクリプトでは 90°になっていますが、ローカルX軸からの許容角度なので、上下左右合せて、アバタの前方 180°の半球になります。)
距離は武器の先端ではなく、自アバタの中心(骨盤)から相手アバタの中心(骨盤)までの距離で、角度もアバタの中心からの角度となっております。
また、検出できるのは、自分に近い方から最大16件までという制限があります。
剣を作ろう
パーツを組合せて、剣を作ります。
■ ご注意
最初にご注意申し上げます。この剣は、土地の設定次第で、アバタを吹き飛ばしたりホームにTPさせたりできますが、決して悪用しないでください。
相手の同意なき攻撃は、シムから BAN されるだけでなく、Linden にアカウントを停止される場合もあります。

■ キットの中身
5つのパーツを組合せて剣を作ります。
これにスクリプトを入れて、「殺せる」剣にしていきます。
乗り物もそうですが、とりあえずREZした生プリムにスクリプト入れるだけでも動作してしまいます。
Sword Making Kit フォルダに入っているものは、次の通りです。
1 | Blade 1 | object | 刃(表) のオブジェクトです。 |
2 | Blade 2 | object | 刃(裏) のオブジェクトです。 |
3 | Guard | object | 鍔 のオブジェクトです。 |
4 | Grip | object | 握り のオブジェクトです。 |
5 | Pommel | object | 柄頭 のオブジェクトです。 |
6 | Sword 1 | script | MCS 対応 剣のスクリプトです。 |
7 | Sword 2 | script | LLCS 2.0 対応 剣のスクリプトです。 |
8 | Sword-Hit | sound | 当たった時の音声データです。 |
9 | Sword-Fail | sound | 外れた時の音声データです。 |
10 | Sword 1 Sample | object | MCS 剣の完成サンプルです。 |
11 | Sword 2 Sample | object | LLCS 剣の完成サンプルです。 |
12 | Workshop 2024, MeltingDots | landmark | 殺されたらこれで戻りましょう。 |
13 | Instructions | notecard | 簡単な説明書です。 |
作るのが面倒だという方は、Marketplace で編集可の剣 を買うとか、直径 3cm くらいで長さ 1.2mくらいの円柱を作って、それを剣に見立ててもいいです。

■ 剣の組立て
フォルダの中の Blade, Gurd, Grip, Pommel を作業台の上にドラッグして REZします。

Blade 1 と Blade 2 を、凸部が外側にくるようにしてぴったり合せます。

Blade の根元から、Guard, Grip, Pommel の順に位置を合せていきます。
座標と角度がそろうと美しいですが、A型の人以外はあまり神経質になる必要はありません。

自分用に、ちょっと変えてみましょう。
リンク部分を編集 で、パーツに色をつけたり、適当なテクスチャを貼付けたりしてみましょう。
輝きをつけると金属っぽくなります。
Blade の幅を太くしたり細くしたり長くしたり短くしたりもできます。
形が気に入らないときは好きなように変形するのもありです。

5つのパーツをすべて選択してリンクします。
このとき、Grip を最後に選択します。
Blade の裏側 (Blade 2) を選択するのを忘れないように。

中身タブを開け、Sword 1, Sword Hit, Sword Fail をドラッグ&ドロップします。

Sword 1 は、剣のスクリプト、Sword Hit は当たったときの肉を斬る音、Sword Fail は外れた時の空を切る音です。
- 出来上がったら、Sword1-Kero のように、他の持ち物と区別できる名前をつけて自分の持ち物の中に取ります。

■ 装着位置を調整
インベントリの、さきほど保存した剣を右クリックして、装着先 を 右手 にします。

作業台にポーズスタンドがあります。sit して、剣を手に持つ位置と角度を調整します。
Firestorm では、アバター メニューからポーズスタンドを起動することもできます。

ポーズを解除して、地面や空など、何もないところをクリックすると剣を振ります。
カーソルが とか じゃなくて、 になっているところです。
持った感じ、振った動きを確認して、なるべく違和感がないように装着位置を調整しましょう。

剣を振るアニメ (sword_strike_r )、死んだポーズ (dead) はビュワーに組み込まれているアニメなので、ファイルを別に用意する必要はありません。名前を指定するだけで使えるのでございます。
組み込みアニメはたくさん用意されています。
Internal Animations
■ チャンバラしてみる
装着後にアニメとコントロールの許可を求めてきますので、許諾してください。
"Click Ground to Attack." のメッセージが出たら準備完了です。
地面や空などの何もないところをクリックすると剣を振ります。
スクリプト Sword 1 は、リンデンの Combat System (LLCS)ではなく、MeltingDots 独自の戦闘システムを採用しています。画面上部の ♥ マークとは無関係に、同じスクリプトの入った剣を装着しているアバタ同士でのみ有効なシステムになっており、無関係の人にダメージは与えません。
Life の初期値は 100 です。Life 値は、剣の上にフローティングテキストで表示されます。

剣を振ったとき、距離 3m、正面180°の範囲に敵がいれば、相手の Life を 10〜30の範囲(ランダム) で削ります。複数の敵が検出されたときは、いちばん近くのアバタが対象となります。
Life が 0 以下になると dead アニメが発動し、倒れたまま 5秒間動けなくなります。
5秒たったら Life 100 で復活します。

適当に殺し合ってみましょう。
■ Combat 2.0 対応
Sword 1 の代わりに Sword 2 を入れると、Combat 2.0に 対応して、LLCS の ダメージが使えるようになり、♥ マークが表示されているダメージ有効エリアで、相手を殺すことができます。
殺されたときに、ホームに飛ばすか地域内の指定個所にとばすか、何もしないかは、土地オーナーが設定できるようですが、よくわかりません。
会場の南側に、赤いポールで囲まれたドクロベエ様の区画がございます。
ここだけ臨時にダメージ・プッシュ有効に設定してありますので、試してみたい方は、どーぞ。

MeltingDots のサンドボックスでは武器禁止です。
後日プッシュやダメージのテストをしたい場合は、リンデンが用意した武器専用のサンドボックスがありますので、そちらをご利用ください。
危険な場所です。殺されても泣かないこと。
Combat (sandbox) Rausch
second life の戦闘システムや武器については、下記をご参照ください。
Combat
Combat/Systems
Weapon
LSL Combat2
スクリプトのソースコードはこちら。
Sword 1
Sword 2
たぶん大丈夫だと思いますが、不具合あったらごめんやで。
■ キットの配布条件
キットに入っている 剣のパーツ、スクリプト、音声はフルパーミッションです。編集/コピー/譲渡 可ですが、有償での販売はおやめください。
また配布するときは、フルパのまま譲渡してください
スクリプトは、中にコメントを入れてありますので、好きなように改造していただいて結構です。
瞬殺も可能ですが、あまり強くすると面白みがなくなります。
本日配布したキットは、後日 MeltingDots のサンドボックスで無料配布する予定です。
http://maps.secondlife.com/secondlife/MeltingDots/41/51/21
|