2017-05-09 5 views
0

これは非常に基本的な質問です。私はArmaスクリプトに慣れ親しんでおり、動いている車両(pickup_truckという名前)の周りにバウンディングボックスを作ろうとしています。このスクリプトを実行するにはどうすればよいですか? http://www.armaholic.com/page.php?id=30924 例:[pickup_truck] execVM "bb_object_1.sqf"; 私はこのスクリプト(http://killzonekid.com/arma-3-bounding-box-utility/)を手に入れることができましたが、バウンディングボックスは車両と一緒に動かない!Arma 3スクリプトを使用したバウンディングボックス

答えて

0

これは、「Draw3D」ミッション・イベント・ハンドラの外側で定義された車両のオブジェクトbboxです。いったん定義されると、この変数はイベントハンドラコードで変更されません。

元、KKの例では、移動中の車の周りにバウンディングボックスを表示するようには設計されていません。

移動車両の周囲にバウンディングボックスを表示する場合は、イベント発生ごと(イベントハンドラコード内)にbbox変数を定義する必要があります。次に、各フレームで境界ボックス点の座標が実際になります。

addMissionEventHandler関数は、ハンドラコード内でパラメータを渡すことを許可していません。したがって、KKの例では、グローバル変数bboxbboxrを使用して、イベントハンドラコードからのアクセスのバウンディングボックス情報を格納していました。

このような場合、私は機能BIS_fnc_addStackedEventHandlerを使用することを好む。この解決策では、イベントハンドラコード(pickup_truck以下のコード)にパラメータを渡すことができます。

採用KKの例:

[ 
    "Whatever_EVH_Name_You_Want", 
    "onEachFrame", 
    { 
     private _veh = _this select 0; 
     private _bb = { 
      _bbx = [_this select 0 select 0, _this select 1 select 0]; 
      _bby = [_this select 0 select 1, _this select 1 select 1]; 
      _bbz = [_this select 0 select 2, _this select 1 select 2]; 
      _arr = []; 
      0 = { 
       _y = _x; 
       0 = { 
        _z = _x; 
        0 = { 
         0 = _arr pushBack (_veh modelToWorld [_x,_y,_z]); 
        } count _bbx; 
       } count _bbz; 
       reverse _bbz; 
      } count _bby; 
      _arr pushBack (_arr select 0); 
      _arr pushBack (_arr select 1); 
      _arr 
     }; 
     private _bbox = boundingBox _veh call _bb; 
     private _bboxr = boundingBoxReal _veh call _bb; 

     for "_i" from 0 to 7 step 2 do { 
      drawLine3D [ 
       _bbox select _i, 
       _bbox select (_i + 2), 
       [0,0,1,1] 
      ]; 
      drawLine3D [ 
       _bboxr select _i, 
       _bboxr select (_i + 2), 
       [0,1,0,1] 
      ]; 
      drawLine3D [ 
       _bbox select (_i + 2), 
       _bbox select (_i + 3), 
       [0,0,1,1] 
      ]; 
      drawLine3D [ 
       _bboxr select (_i + 2), 
       _bboxr select (_i + 3), 
       [0,1,0,1] 
      ]; 
      drawLine3D [ 
       _bbox select (_i + 3), 
       _bbox select (_i + 1), 
       [0,0,1,1] 
      ]; 
      drawLine3D [ 
       _bboxr select (_i + 3), 
       _bboxr select (_i + 1), 
       [0,1,0,1] 
      ]; 
     }; 
    }, 
    [pickup_truck] 
] call BIS_fnc_addStackedEventHandler; 
関連する問題