ARMA3 ミッションエディットスレ

ホーム フォーラム TRI Gaming フォーラム ARMA3 ミッションエディットスレ

  • このトピックには444件の返信、56人の参加者があり、最後にahurineにより2ヶ月前に更新されました。
10件の投稿を表示中 - 436 - 445件目 (全445件中)
  • 投稿者
    投稿
  • #286137
    michy_REV19
    キーマスター

    3DEN Editor – PropsのLocal処理オプション

    3DEN Editorに、配置したProp系オブジェクトをローカル処理するオプションメニューが追加されていました。
    オブジェクトを右クリック⇒AttributesメニューのObject: Special States欄にあるLocal Onlyにチェックを入れると有効になります。
    このオプションが表示される条件は、車両の場合はSimple Objectオプションが有効であること、オブジェクトの場合はEnable Simulationが無効であること、がそれぞれ必要です。
    ※ようはSimple Objectsである必要がある。

    効果の方ですが、これが有効になったオブジェクトは、サーバーではなくローカルマシン(MPの場合、参加者それぞれのPC)で処理されます。
    つまり、あらゆる同期が無効になるかわりにサーバー側の負荷を減らすことが出来ます。
    ModuleのHide Terrain Objectsで使えるOperate Locallyオプションと似たようなものですね。
    飾りオブジェクトをたくさん出す場合には有効ですが、とりさばのミッションレベルなら使わなくても問題ないですね。(←なんで書いたの?)

    まあ、ミッション最適化にはこういうテクもあるんだよというのを知ってもらえればとおもいマス。

    #286425
    michy_REV19
    キーマスター

    TSP Breach アドオン環境下におけるドア施錠の挙動について

    今年7月のプリセット更新にて、ドアブリーチ関連のシステムを追加するBreachアドオンが導入されました。
    とても面白い機能なのですが、サーバー上でのよくわからん挙動がエディターの皆様の悩みの種かと思います。
    この挙動に関していろいろ検証してきたので、とりあえず明らかになったことを情報共有します。
    なお、検証環境は2023/09/17更新のプリセットで、使用アセットにはバニラのもののみを使用しました。

    Breachアドオンが導入される前後のミッションで挙動が違う?
    これは嘘です。
    「アセットブラウザから配置した建物の施錠」と「MAP上に初期配置された建物の施錠」のどちらの方法でも、ミッションのsqmファイルにはBreach関連のコードが挿入されることはないため、アドオンを読み込んでいるかどうかで挙動が変わることは無いと思われます。

    アセットブラウザから配置した建物の施錠
    ・ローカル環境:機能する
    ・サーバー環境:機能しない
    アセットブラウザから配置して[Attributes ⇒ Special States]から施錠をした建物については、マルチプレイ環境では施錠が有効になりません。
    おそらく、これはBreachアドオンの有無に関係なく発生する問題で、内部スクリプトのバグによるものかと思われます。

    MAP上に初期配置された建物の施錠
    ・ローカル環境:機能する
    ・サーバー環境:機能しないことがある
    Edit Terrain Objectモジュールを使用して施錠した建物については、施錠が機能しないことがあります。
    こちらについてはまだ検証しきれていないのですが、おそらく「MAP上に初期配置された建物を確率で施錠する機能」のコードと処理が被ってしまっているのかと予想しています。
    Addon OptionのBlacklistを使えばいい感じになるかも?

    エディター側での対応策
    denbo72さんがスクリプト公開スレにていいかんじのを公開してくださってるのでこれ使いましょう。

    MAPに初期配置された建物に適用したいときは、以下の手順で名前をつけましょう。
    ①3DENで該当MAPを開き適当なユニットを配置してプレビューを開始する
    ②施錠したい建物の前に立つ
    ③デバッグコンソールのWatchフィールドでgetObjectID cursorObjectを入力し戻り値の数値(“”はいらない)をメモする
    ④3DENの編集画面に戻りGame Logicを配置する
    ⑤Game LogicのInitフィールドにbldg1= [0,0,0] nearestObject 【③の戻り値】;を入力する
    bldg1がthisの代わりに使えます

    #286435
    michy_REV19
    キーマスター

    2023/09/22/Friに第08回 新・エディターの集いを開催しました、ご参加いただいた皆さんありがとうございました。(議事録はこちら

    今回は周知事項・策定事項ともにそんなに多くないのですが、一つだけこちらのスレでも周知したいことがあります。

    Hide Terrain Objectsモジュールを使用するときは、Operate Locallyオプションを有効にしてください

    MAP上の建物や植生などのオブジェクトを削除するために、Hide Terrain Objectsモジュールを使用しているミッションは多いかと思います。
    このモジュールはMP環境において、クライアント間での同一性保持のためにサーバー側でモジュールを読み込んだ後に、各クライアントにオブジェクトを非表示にするコマンドが送信され処理を実行する、という動作をするようです。
    しかし、このモジュールによって一度に大量のオブジェクトに処理を加えた場合、ネットワークに大きな負荷がかかり大人数のMP環境では同期ズレが発生しやすいそうです。
    Operate Locallyオプションを有効にすると、モジュールがローカルで直接処理されるため、ネットワークに負荷を掛けないようになります。

    これが問題になったのはつい先日で、帽子が素敵な某氏(⇐ガハハ)のミッションを回した際、開始直後にないはずの壁が見えてしまう人が複数いる(2割ほど)という事象が発生しました。
    BIフォーラムを見ると、似たような事例が報告されています。
    そもそも、Operate LocallyオプションのマウスオーバーTipsにも「大量のオブジェクトを適用するMPミッションでは使用を推奨」って書いてあるんですけど、ガチで検証されたことがないのでノウハウ不足は仕方ないと思います。

    また、最近は負荷軽減のためか交戦地域以外のオブジェクトをこのモジュールを使ってごっそり削除しているミッションがちょこちょこあるようですが、そんなに効果ないんじゃないかと思ってます。
    というのも、そもそも建物などのオブジェクトはSimple Objects(ポリゴンとテクスチャのみで構成されたオブジェクト)に近い描画パフォーマンスを発揮するうえに、車両やThingsオブジェクト(物理演算を持つ小物)に比べて計算リソースをほとんど消費しないのです。
    つまり、物理演算が無いためCPU・RAM・Networkにはほとんど負荷が掛からず、そもそも視界に入らないならGPUにも負荷がかからない、という意味です。
    体感では、オブジェクトを消すよりもTerrain Grid(View Distanceメニューで弄れる地形の細かさを調整するやつ)を荒くしたほうが遥かに負荷軽減に寄与します。

    蛇足が長くなりましたが、今後ミッションでHide Terrain Objectsモジュールを使用するときは、Operate Locallyオプションを有効にしてください。

    最近、MP環境でのバニラのモジュール関連の不具合が散見されるので、サーバー上でのデバッグをしっかりやりましょう。

    #286443
    michy_REV19
    キーマスター

    BW MODのパレットに積むやつ by doven博士

    // Load action
    _this addAction ["Load cargo to vehicle", {[5,[nearestObject [player, 'BWA3_WLP14_Flatbed_Oliv'], _this select 0],{(_this select 0 select 0) setVehicleCargo (_this select 0 select 1);},{},"Loading..."] call ace_common_fnc_progressBar;}, nil, 1.5, true, true,"","isNull (isVehicleCargo _target) && {player distance _target < 4 && count (_this nearEntities ['BWA3_WLP14_Flatbed_Oliv',10]) > 0}"];
    
    // Unload action
    _this addAction ["Unload one cargo", {objNull setVehicleCargo (getVehicleCargo (_this select 0) select 0);}, nil, 1.5, true, true,'',''];
    #286470
    michy_REV19
    キーマスター

    AI Skillの仕様について

    ミッションを制作するとき、敵AIユニットの”強さ”を調整することは非常に重要です。
    AI Skillは、AIユニットの個々の能力を決める重要な要素です。
    多くのエディターさんはデフォルト値を使用しているか、伝聞で受け継がれた秘伝の数値を使用しているかと思います。
    しかし細かい仕様に関してはあまり知られていないようなので、まとめておこうと思います。
    参考:Arma 3: AI Skill – Biki

    AI Skillの基礎
    ・全てのユニットには個々のAI Skillが割り当てられている。
    ・AI Skillには”General Skill”と8(9)種類の”Sub Skill”から構成される
    ・Sub Skillには”Skill”と”Precision”のサブカテゴリが存在し、それぞれ難易度設定の該当項目に影響を受ける

    Sub Skill 一覧(個々の詳細はこちら
    aimingAccuracy [Precison]
    aimingShake [Precison]
    aimingSpeed [Skill]
    commanding [Skill]
    courage [Skill]
    endurance [Skill] (Arma3では無効)
    general [Skill]
    reloadSpeed [Skill]
    spotDistance [Skill]
    spotTime [Skill]

    AI Skillの設定方法
    ・AI SkillはGeneral Skillと各Sub Skillに対して0~1の数値をで設定可能
    ・General Skillを指定すると全てのSub Skillに同じ値が反映される
    ・数値が大きいほど指定したサブスキルに関連する能力が高くなる
    ・AI Skillは以下の方法で変更可能である
     ①[SP] Settings ⇒ Game Options ⇒ Difficultyタブ ⇒ Simulation欄 ⇒ SkillとPrecision
     ②[MP] サーバープロファイルの編集(内容は①と同じ)
     ③3DEN ⇒ ユニットを右クリック ⇒ Statesタブ ⇒ Skillスライダー
     ④3DEN ⇒ Assets ⇒ Systems ⇒ Modules ⇒ Set Skillモジュール
     ⑤スクリプトコマンド:setSkill
     ⑥BIS関数:BIS_fnc_EXP_camp_setSkill
     ⑦BIS関数:BIS_fnc_EXP_camp_dynamicAISkill

    AI Skillの決定プロセス
    AI Skillは上記の方法で0~1の値を指定できると説明しましたが、実際は指定した値がそのまま反映されるわけではなく、複雑なプロセスを通して決定され、その変数は以下の要素です。
    A:cfgAISkill(アドオンで上書きしない限り決まった値が適用される)
    B:① or ②(SPかMPかによってどちらかが適用される)
    C:③~⑦の設定(最後に読み込まれた要素が適用されるが併用はしないほうがよい)

    プロセスについて詳しく書こうと思いましたが、読んだところでCOOPが面白くなるわけじゃないのでやめときます、興味ある人はこれ読んでください。
    ちなみにこのプロセスによって決まる最終スキル値はskillFinalコマンドで確認出来ます。

    結論だけ書くと、Bの値を3段階で変化させたとき、入力(Cの値)と出力(最終スキル値)の関係は以下のようになります。


    君たちはどうスキルを設定するか
    ここまでの仕様を実際のミッション制作にどう活かすのかという話ですが、3DENやスクリプトで設定したスキル値はそのまま反映される訳では無いということを覚えてください。
    数値にして0.1オーダーの話ですが、射撃精度に関しては0.1の影響が大きい(経験則ですが)ので、無視できない仕様です。

    ちなみにとりさばのサーバー難易度設定で”Skill”と”Precision”がどのくらいになっているのかについて私の口から語ることは出来ませんが、3DENで設定したスキル値と最終スキル値は以下のような関係になってるので参考にしてみてください。



    #286471
    michy_REV19
    キーマスター

    AI関連でもう一つ。
    AI Facts & Myths Compilation List
    こっちは読み物としておもしろいよ。

    #286788
    Forest
    参加者

    こんにちは~ Forestです。
    ウクライナ軍と海兵隊MODに更新が入りました。
    ウクライナ軍のIMTVが消えたりしてるのでミッションエディターの方は確認をお願いします。

    #287121
    ahurine
    参加者

    怪我を演出する
    コミュニティの活動終了に伴い供養

    Bob君の失血量、血圧低下、心停止を無視して強制的に気絶から復帰させる。(失血、血圧、心停止による突然の死は発生するので、別途ケアする必要あり)
    [_Bob, false] call ace_medical_status_fnc_setUnconsciousState;

    Bob君の血液量を即時満タンにする。
    _Bob setVariable ["ace_medical_bloodVolume", 6,true];

    Bob君の心臓を再起動する。
    ["ace_medical_CPRSucceeded", _Bob] call CBA_fnc_localEvent;

    Bob君の左腕を骨折させる。
    _Bob setVariable ["ace_medical_fractures",[0,0,1,0,0,0],true];

    Bob君の右腕を骨折させる。
    _Bob setVariable ["ace_medical_fractures",[0,0,0,1,0,0],true];

    Bob君の左脚を骨折させる。
    _Bob setVariable ["ace_medical_fractures",[0,0,0,0,1,0],true];

    Bob君の右脚を骨折させる。
    _Bob setVariable ["ace_medical_fractures",[0,0,0,0,0,1],true];

    Bob君の左腕に添え木をあてた状態にする。
    _Bob setVariable ["ace_medical_fractures",[0,0,-1,0,0,0],true];

    「コールオブデューティーとかで車両の横転やヘリコプターの墜落で気絶した主人公が目を覚ますと戦場のど真ん中にいたみたいなシチュエーションあるけど、五体満足で復帰するの変じゃね?」と訝しむボブ君のためのスクリプト。

    while文でクラッシュサイトから一定距離離れるまで10秒間隔くらいで血液即時満タン、心臓再起動、強制気絶復帰を繰り返すスクリプト等にすると、めちゃめちゃ出血しているけどいつまでたっても死なないボブ君ができます。

    #287333
    ahurine
    参加者

    乗り物の耐久を調整する。
    供養2つめ

    _veh addEventHandler ["HandleDamage", {((_this select 2)/0.6)}];

    上記のコードの0.6を調整してください。やわらか戦車もカチカチ航空機も思いのままです。
    数値を小さくするとやわらくなり、逆に大きくすると硬くなります。
    数値を4にすると大抵の攻撃に対して無敵になれます。
    耐久値が減る攻撃に対し有効になりますので、数値をめちゃくちゃ小さくしても40mmグレネードランチャーで戦車を破壊できるようにはなりません。
    「数値を2にして耐久値2倍、数値を3にして耐久値3倍!」にはなりませんので注意してください。
    「CUP製チャレンジャー2の側面装甲に斜めからRHS製PG-7VLを当てた時に1発で乗員が降車する」みたいな目標を最初に設定してから数値を微調整するといい感じになります。

    • この返信は2ヶ月、 1週前にahurineが編集しました。
    • この返信は2ヶ月、 1週前にahurineが編集しました。
    #287398
    ahurine
    参加者

    ヘリボーンスクリプト三種盛り
    供養3つ目

    ヘリコプターで降着、パラドロップ、ファストロープの3つをするスクリプトです。
    以下のリンクからスクリプトとサンプルミッションをダウンロードできます。
    https://www.4shared.com/s/fVAIHXaM_ku

    ・それぞれの説明

    ・着陸して展開
    着陸地点は何もない平地にしてください。
    着陸地点に何か物があるときは地形オブジェクトの非表示のモジュールで岩や建物を消してあげるとうまくいきます。
    着陸中にパイロットが死亡したり、爆発せずに脱出するといつまでもヘリコプターが残ってしまうので、パイロットが死亡もしくはパイロットが脱出してから60秒経過でヘリコプターを消しています。

    ・パラシュートによる降下
    パラシュート降下するタイミングでヘリコプターパイロットを一度消して新しいヘリコプターパイロットにしています。
    これはヘリコプターパイロットのAIが脱出した乗員を回収しようと着陸するので、そういったおせっかいな動きを無効化するためのものです。
    歩兵が使うパラシュートはバニラのパラシュートですが、ACE3 MODの非操作型パラシュートを使うと降着する位置をある程度まとめることができます。
    時速80km/hで降下をはじめる関係で、地上からの射撃に対しては一番影響が少ないタイプです。

    ・ファストロープによる降下
    一部ファストロープによる降下に対応していないヘリコプターがあります(バニラのUH-80Ghost Hawkとか)のでテストプレイで確認をお願いします。
    毎フレームごとに計算処理する箇所がありますので、負荷が少ない少人数ミッションでの使用を推奨します。
    ACE3 MODにはファストロープによる降下をするウェイポイントがありますが、山なりな地形だと降下してくれない、降下地点が大きくズレる、降下した歩兵が立ったままの状態になる等の不具合があったので、それらを修正したものになります。
    降下地点の付近まではdoMoveコマンドで近づき、降下地点から150m以内かつ時速3km/h以下のときにsetVelocityTransformationコマンドとlinearConversionコマンドとbezierInterpolationコマンドの合わせ技で降下地点の上空20mに正確に近づきます。
    正確に近づくときには多少不自然な挙動をしていますが、これはベジェ曲線コマンドの設定と移動までのインターバルの設定が煩雑なためです。
    正確に近づくときに使っているsetVelocityTransformationコマンドは毎フレームごとに計算処理するので歩兵やプレイヤーが多く負荷が高い状況ではカクついた動きになります。
    ホバリング待機する関係で、地上からの射撃に対しては一番影響が大きいタイプです。

10件の投稿を表示中 - 436 - 445件目 (全445件中)
  • このトピックに返信するにはログインが必要です。