2012/8/16 木曜日

建物を作ろう 上級者編 その? config

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 15:58:39

前回の完成ファイルを見ながら説明を読んでください。

configはCfgPatchesでアドオン名と依存関係を定義
CfgVehiclesで建物のクラス、アニメの動作時間等を定義し、アクションメニューでドアが開くようにします。

Cfgvehicleについて
クラスはHouseから継承します。
animated = 1;はよく分かりませんが、デフォルトは1のようです。
まだ破壊モデルの定義はしていませんが、破壊モデルに置き換える準備として、名前にLand_とつけておきます。
今回のモデルは class Land_test_building としました。
class AnimationSourcesでドアのsourceがuser定義であること、
ドアが動く秒数(animPeriod)が2秒であること、ドアは初めに閉じられていること(initphase=0)を定義します。

class UserActionsではドアのアクションメニューを定義します。
開けるアクションと閉じるアクションが必要です。
class OpenDoor、class CloseDoorを定義しました。
手順省略のため、アクションメニューが出る点(position)は、ドアの名前かドアの回転軸の名前にします。
今回は回転軸にしました。青いドアは上にスライドするので、アニメ後にアクションメニューからプレーヤから離れる恐れがあるためです。

建物を作ろう 上級者編 その? アニメ

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 11:36:55

完成済みファイルこちら

モデルがあるフォルダにmodel.cfgという名前のファイルを用意します。
model.cfgはclass CfgSkeletonsclass CfgModelsに分かれます。
CfgSkeletonsは骨を定義します。
”子の骨”と”親の骨”の2つの要素で成り立っています。
分かりやすく定義するなら、以下のようになります。
skeletonBones[] ={“頭,”首” , ”首”,”上半身”};
頭と首で1セットです。首の親は上半身です。上半身が回転すると首と頭も追従して回転するのです。
(skeletonの概念について今はピンと来なくても、慣れれば分かるようになると思います。)
skeletonInheritは骨の定義を親クラスから受け継ぎます。今回はDefaultから受け継ぎます。
初心者はBISの定義を親として受け継ぐのが無難です。

CfgModelsはアニメはモデルを構成するmemoryポイントなどを定義します。
クラス名は3dモデルと同じ名前でないと動作しません。
sectionsはmemory LODで定義した光点や乗り物の乗車位置などを書きます。この建物には明かりが無いので、空でOK。
sectionsInheritは親クラスのmemory LODの名前を引き継げます。空でOK。

skeletonNameはCfgSkeletonsで定義した骨の名前を書きます。
class Animationsでアニメを定義します。
type=”translation”の場合、axisに沿って平行移動します。
memory=1にすることでaxisの大きさ(2点間の距離)を基準に動きます。
offset1=1;がaxisの大きさ1つ分ということです。
type=”translationX”あるいは”translationY”の場合、X軸/Y軸に動きます。
さらにX軸/Y軸の動きでaxisを指定しない場合、単位はメートルになります。
offset1=1;が1mということです。
(MH53の掃海具の牽引ロープはこれを使っています。建物ではまず使わないでしょう。)

type=”rotation”の場合、axisを軸に回転します。
type=”rotationX”あるいは”rotationY”の場合、X軸/Y軸に沿って回転するため、axisは不要(axis=””;)です。
sourceAddress=”clamp”;にしていますが、sourceAddress=”loop”;にすると回り続けます。
プロペラの回転アニメはloopです。

t9
ブルドーザーを起動し、ミドルマウスクリックでアニメの選択、マウスホイール回転でアニメをプレビューすることができます。

建物を作ろう 上級者編 その? モデル作成

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 10:46:46

他の解説に行く前に、まずモデルを作ります。

見た目のLOD
t1
こんなモデルを用意しました。ドアを以下のように作ることにします。
赤:木製のドア、回転式  壊れたら消失
青:金属製のドア、スライド式 壊れたら消失
t2
ちなみに色は面を選んでEボタンを押し、このように塗りました。単色ならテクスチャ不要なのです。
#(argb)color(*,*,*,*)の4つ目の値は透明度です。1より小さいと半透明になります。


以下で当たり判定であるジオメトリ/fireジオメトリを作りますが、面が長方形の単純な形のみで構成されているため、
モデルごとコピーしていますが、複雑な形のモデルでは、辺り判定用の単純な形を別に用意する必要があります。

重さのLOD
t3
上で作成した0LODを右クリック→duplicateでコピーして、1LODを作ります。
1LODをさらに右クリックしてプロパティでジオメトリを選びます。すべての面を選択して重さを1000(1t)にします。
ジオメトリは当たり判定と重さです。建物なので戦車にぶつかっても吹っ飛ぶことはありませんが、乗り物だと物理エンジンにも作用します。

当たり判定のLOD
t4
0LODからでもジオメトリからでもよいので、同じようにduplicateし、fireジオメトリを作ります。
ドアの面を選んで?で解凍したP:\CA\data\Penetrationフォルダの中から、赤はwood、青はironplateを選びます。
壁の部分はrvmat無しですが、その場合はデフォルトで小石のかけらが破片で出ます。

t5
0LOD、ジオメトリ、fireジオメトリのドアそれぞれに名前をつけます。
ジオメトリ、fireジオメトリはstructure->find componentsで全ての面に名前をつけておきます。こうしないと辺り判定が動きません。

影のLOD
t6
今度は0LODをコピーしてshadow volumeを作ります。
全ての面を選択し、structure->trianglateで三角面に変換し、Uボタンで平滑面にします。
影LODは全ての面が閉じており、三角のみの面で構成され、平滑面でないと正常に働きません。

描画負担軽減のLOD(無くても動作します)
shadowvolumeをコピーして、viewジオメトリを作りましょう。
これは手前にこの建物があるとき、奥のオブジェクトを描画しないようにする機能です。
これがあるとゲームが軽くなります。影と同じく三角面で構成される必要があるようです。
structure->find componentsもしておきます。

ここまで作成したLODの全てのドアに、door_r、door_bと名付けておきます。

動作の基準点のLOD
右クリック→newで新しいLODを作り、右クリックでmemoyLODを作成します。
memoryLODとは、アニメの軸や光源、音などの基本座標を定義する場所です。

t7
0LODに戻り、青ドア、赤ドアの軸となる4つの点をctrl+cでコピーし、memory LODにペーストします。

t8
2つの軸に名前をつけましょう。それぞれdoor_r_axis、door_b_axisとします。

次回はアニメを定義します。

追記:
visitorで島に建物を置く場合、ジオメトリのプロパティにいくつか追記する必要があります。
ARMAのサンプルモデルを開いて参考にしましょう。バイナライズされていないのでo2で直接開くことができます。
世界のアドオンメーカーはほぼ全員、このモデルを参考にしていると言ってよいでしょう。
サンプルモデルはこちら
window->named propatiesでプロパティ書き込み画面が出せます。
t11

HTML convert time: 0.179 sec. Powered by WordPress ME