2020/3/10 火曜日

arma3で島をつくる その6

Filed under:   ─島編 — gachopin @ 7:00:49

神社を置いてみた。
20200310064829_1

ここのモデルを使用させていただきました。

2020/2/14 金曜日

arma3で島をつくる その5

Filed under:   ─島編 — gachopin @ 0:13:58

リヴォニアMAPの木をミッションエディタ(map builder)で配置してインポート可能になりました!
terrain_builder_enoch
Vegetation_F_Enochをextract pboにかけてP:\に解凍しtemplate librariesに追加すればOK。

2020/2/2 日曜日

arma3で島をつくる その4

Filed under:   ─島編 — gachopin @ 22:30:53

buldozerの設定でえらい苦労したのでメモ。
buldozerの参考
terrain builderの参考
上記サイトはかなり参考にはなりますが、私が使用しているarma3 toolsがbeta版なせいか、buldozerはうまく動きませんでした。テクスチャやモデルが反映されません。
現時点でいろいろ試した結果、現在は下記の通り設定してうまく動いています。
◆ARMA3 toolsのoption
Path to Arma3 Directory:Arma3のインストールフォルダ
Path to your P Drive:Pドライブのフォルダにしている場所を絶対パスで指定
◆ARMA3 toolsのBuldozer Configurator
Object Builder and Terrain Builderを選択
Use Buldozer from install directory of the gameのチェックを外し、Pドライブのフォルダにしている場所を絶対パスで指定、Apply configuration
◆terrain builderの設定
.exe file path:P:\buldozer.exe ←64bit版だとカーソルを動かせない
Launch parameters: -buldozer -name=Buldozer -window -exThreads=0 -disableSteam -noAsserts -cfg=p:\buldozer.cfg
Data directory: P:\
◆ついでにobject builderの設定
P:\buldozer.exe -buldozer -name=Buldozer -window -noLand -exThreads=0 -noLogs -noAsserts -cfg=p:\buldozer.cfg
◆Addon BuilderのOPTIONSで追記したもの(少なくともshp,cfgは追記が必要と思われる)
*.wrp;*.shp;*.dbf;*.prj;*.shx;*.cfg;

2020/1/25 土曜日

arma3で島をつくる その3

Filed under:   ─島編 — gachopin @ 12:52:28

地形編集のメモ
・以下の手順でL3DTで編集した地形データをterrain builderに持っていける
(過去記事で紹介済みの手順)
1.国土地理院から地形データを取ってくる
2.xml編集(-9999を任意の高さに置き換え)
3.基盤地図情報標高DEM変換ツールでtif生成
4.tif読み込み
5.terrain builderでmapframe作成
(ここから新しい手順)
6.map frameをつくる
7.export -> terrainでterrain builderで作った地形データを出力
8.L3DTで編集、map frameで囲った地形のうちデータが存在しない箇所が0mなので任意の高さに修正したり、砂浜はなだらかな地形にしたりする
l3dt_edit
9.ascでエクスポート
10.ascをテキストエディタで開き、xllcornerとyllcornerの値をmap frameの緯度経度の値に書き換える
11.terrain builderで編集したasxをimport terrainで読み込む
island_0125

2018/9/24 月曜日

arma3で島をつくる その2

Filed under: Armaアドオン製作支援,  ─島編 — gachopin @ 18:22:52

先ほど作成したmapframeをスクリーンショットで撮ります。
この青四角で囲った範囲が島の画像として使用されます。
国土地理院のサイトで衛星画像をとってきて、上記のスクリーンショットに重ねるように画像を加工します。
4_satelite
次に、Layers.cfgで定義するレイヤ画像を作成します。
今回は簡易に砂浜か、緑かで分けます。
衛星画像の緑をざっと範囲で囲って塗りました。
5_layer
どちらもpngで保存します。
files→import→satelite imagesで衛星画像を、files→import→satelite mask imagesでレイヤ画像を読み込みます。
ここで大きさを調整。その1でresolutionが1.285742だったので、1280にこれをかけてリサイズします。
6_resize_image
上記の準備が出来たらmapframeにてこのようにオプションをつけてGenerate layersをクリックします。画像が自動分割してpaaが生成されます。
7_mapframe
近づくとlayer.cfgの定義に沿って草のテクスチャが貼られたことがわかります。
8_land_texture

arma3で島をつくる その1

Filed under: Armaアドオン製作支援,  ─島編 — gachopin @ 16:54:29

arma3で簡易な島を作ってみます。
まずは国土地理院のサイトにユーザー登録しましょう。
ここのサイトの数値標高モデルを使用します。
国土地理院のデータを利用したものを公開する際は出典を明記すればよいようです。
詳しくはこちらの利用規約を参照。
今回はこの地形を利用します。
1_dem_source
zipファイルの中に5mメッシュのxmlが入っているので解凍します。今回はP:\gac_ohkunoに解凍しました。
ここでテクニック。armaでは「海水面,-9999」など、-9999となっている箇所は0mと認識され、海でなくただの浅瀬になってしまうのでnotepad++などで「-20」に変更します。(-20mと認識される)
今回は908696箇所が-9999でした。
次にこのツールを利用してtifファイルを作成します。
まずはconvert_and_merge.vbsを起動。LatLong(0)、「はい」の順で選択しxmlファイルを置いたフォルダを選択します。
ocean levelはYes(0)でOK。
次に、terrain builderを起動します。
準備として、tools→preferencesにて「Data directory」をP:\に、「Project directory」をP:\gac_ohkunoに変更します。また、同階層にフォルダ「data」「source」
buldozerのパスはP:\Buldozer.exe、パラメータは-buldozer -name=Buldozer -window -exThreads=0 -disableSteam -noAsserts -cfg=p:\buldozer.cfgにしておきます。
次に、file→import→terrainsを選択、取り込みたいtifを選択します。今回は大久野島だけほしいので51323769.tifと51323779.tifだけ選択。
(全てのtifを選ぶ場合はファイルの種類をall formatにしてmergeLL.vrtを選択しないとエラーになります。)
こうなります。このように少し斜めになっています。
2_tif_import
これにmapframeを追加します。
Mapframes→Add mapframeを選択し島を囲います。
気にするポイント
1.Locationタブ
Nameに島の名前を入れます。OutputrootはP:\gac_ohkunoを指定。
2.SamplersタブのSatelite/Surface source imagesのSize
mapの地形画像の分割に影響します。分割できないサイズだとmapにテクスチャが貼られません。今回は1649×1649から変更し、1280×1280としておきます。
(分割可能なサイズでないと3.のRebuild terrainが押せません)
3.ProcessingタブのLayers.cfg
mapの地形を色分けした画像を別に用意する必要があります。
この色分けがなんの地形なのか、を定義するのがこのcfgファイルです。
source配下に設置し選択します。あとでサンプルをUPします。
4.Rebuild terrain
とりあえずRebuild terrainを押してOKをクリックします。
狭い地形なので島の外が海じゃないのが分かっちゃいますね。
3_terrain_only

2017/2/15 水曜日

ドアの開け方、閉め方

Filed under:   ─スクリプト編 — gachopin @ 22:51:51

ドアのアニメの名称の調べ方
hint format [“%1″,configProperties [configFile >> “CfgVehicles” >> typeOf(nearestBuilding getpos this) >> “AnimationSources”]];

↑でドアアニメの名前が”Door_1_source”だったときの開き方
(nearestBuilding getpos this) animateSource [“Door_1_source”,1]

2017/1/7 土曜日

クラス継承(+上書き)の話

Filed under: Armaアドオン製作支援,―config編 — gachopin @ 11:27:22

普通のアドオン作成では行わないconfig作成の応用編。
クラスを上書きして元のクラスを書き換えてしまうconfigの書き方について解説します。
けっこう複雑です。(そして、海外のサイトにもろくに解説が無い)
基本的なクラス継承はBISのwikiをご参照ください。

今回の目的:rhsusf_c_weaponsで定義されている5.56mmライフル用スコープを89式小銃に装備可能にすること。

光学照準器を装着するクラスは、cfgweapons⇒武器クラス⇒class WeaponSlotsInfo⇒class CowsSlotで定義します。
rhsusf_c_weaponsのcfgweaponsでm4のベースクラス(rhs_weap_m4_Base)を見てみると、以下のような記述があります。
class WeaponSlotsInfo
{
mass = 60;
allowedSlots[] = {901};
class UnderBarrelSlot: rhs_western_rifle_underbarrel_slot{};
class CowsSlot: rhs_western_rifle_scopes_slot_short{};
class PointerSlot: rhs_western_rifle_laser_slot_top{};
class MuzzleSlot: rhs_western_rifle_muzzle_slot{};
class GripodSlot: rhs_western_rifle_gripod_slot{};
};
光学照準機の定義はrhs_western_rifle_scopes_slot_shortを継承していることが分かります。
このクラスの親クラス(asdg_OpticRail1913_short)を見るとshortとlongに分かれており、longはスコープマウントが長いものに装着するスコープが定義されていることがわかります。つまり、スコープマウントが短い89式はshortを継承すればよい。
ただ、そのまま継承すると定義が上書きされてgac_JSDFのスコープが装着できなくなってしまうので、追記が必要です。

まずclass CfgPatchesで置き換え元のクラスを書き出します。
例) requiredAddons[] = {“rhsusf_c_weapons”,”gac_JSDF_weapon”};
次にRHSのスコープ定義を記述します。ただし、89式のスコープ定義を継承可能にするため記述を工夫します。

class asdg_OpticRail1913_short;
class rhs_western_rifle_scopes_slot_short: asdg_OpticRail1913_short
{
class compatibleItems; ←継承用に書いておく
};

最後にcfgweaponsのクラスに以下のように追記します。継承関係が分かりやすいよう、親クラスも載せておきます。
class Tavor_base_F; ←BISの銃
class gac_JSDF_W_R_Type89_base: Tavor_base_F ←BISの銃を継承した89式の親クラス
{
class WeaponSlotsInfo; ←継承用に書いておく
};
class gac_JSDF_W_R_Type89 : gac_JSDF_W_R_Type89_base {
class WeaponSlotsInfo: WeaponSlotsInfo ←Type89_baseのweaponslotsinfoを継承
{
class CowsSlot: rhs_western_rifle_scopes_slot_short ←上書き対称のCowsSlot
{
gac_optic_JGSDF_Dotsight = 1; ←継承しつつ、新たに89式小銃用スコープも定義
};
};
89式小銃の折り畳み銃床については最初からスコープがマウントしてある定義がしてあるためか、RHSのスコープが装着できません。おそらくRHSのスコープごとに【装着済みのクラス】を定義してあげないと装備できないと思います。(未確認)

2014/4/19 土曜日

砲撃支援スクリプト

Filed under: Arma一般,  ─スクリプト編 — gachopin @ 19:23:19

砲撃支援スクリプトを組みました。
多数のオプション項目付き。
arty_script.utes
22:30更新 dedicated serverで完璧に動きます

常にグループのリーダーが砲撃支援を行える権限委譲バージョン(テスト中)
arty_script_leader.utes

2014/3/1 土曜日

createunitのマルチプレイでの特徴

Filed under:   ─スクリプト編 — gachopin @ 10:46:08

実験でcreateunitの特徴が判明したので解説します。
シングルプレイと違い、動作が異なります。createunit arrayは初期状態ではグループに入っていないバグがあるけど、下記のようにバグを回避できます。

?createUnit
・OFPからの古い命令。「作成するクラス」にパラメータを付けて命令する。
・ユニットに対してスクリプトで命令することは不可能だが、イベントハンドラは例外的に可能。(イベントハンドラではスクリプトの引数を渡すことはできない)
マルチプレイでのユニットは一律「リモートで作成されたAI」として認識されるため、グループで分けることができない。

?createUnit Array
・Armaからの命令。「グループ」にパラメータを付けて命令する。
・ユニットに対してスクリプトで命令することができる。(つまり、ある条件化でユニットを消したり、増殖させたり、?で出来ないことができる)
マルチプレイでのユニットは個別に認識されるが、スクリプトの実行はcreateUnitしたマシン(基本的にはサーバー)で行われる。また、createunitで指定したグループにjoinしない(!)ので用意したスクリプトで改めてjoin命令を行う必要がある。

私が作成中のスクリプトは?を使っています。
?を使う利点
・ゾンビ増殖スクリプトのパラメータをゾンビに渡すことで、ミッションの流れに応じたゾンビの数をコントロールできる。
・ゾンビが倒れたあと、その数だけ増殖させるか選べる
・ある条件化、例えばプレーヤが特定のwaypointまで進んだ場合あるいはゾンビがプレーヤから離れすぎた場合等で、「あるオブジェクトに紐付けられたゾンビ集団」を一律で削除させたりできる。

3/2追記
サーバ側でcreateunit arrayしたユニットにスクリプトを適用すると、サーバ側だけに作用します。
パーティクルのエフェクト等、それぞれのクライアントに動作させる必要がある場合には次の方法を使います。
1.サーバ側での処理(isServer等を使う)
createunitしたユニットが_unitという名前の場合、createunitするマシンで以下を実行する
missionNamespace setVariable [“任意の識別名”,_unit];
publicVariable “任意の識別名”;

この処理で、_unitの存在を”任意の識別名”に紐付けて全クライアントに送信します。

2.クライアント側での処理(isPlayer等を使う)
クライアントごとに以下を実行する
“(上記で指定した)任意の識別名” addPublicVariableEventHandler {
_unit = _this select 1;
任意のスクリプト
};

この処理で、1.で送信した_unitの存在を受け取り、任意のスクリプトで動かすことができるようになります。

また、上記はdedicated serverで建てるときは正常に動きますが、個人でマルチプレイを立てるときは立てている本人がPublicVariableを受け取ることができません。
よって1.のスクリプト内に代替処理を入れる必要があります。
例)if(not isDedicated)then{任意のスクリプト};を使う

具体例はゾンビミッションの例を参考にしてください。

次ページへ »

HTML convert time: 0.246 sec. Powered by WordPress ME