{"name":"drawIcon3D","operator":null,"title":"drawIcon3D","type":"command","url":"https://community.bistudio.com/wiki/drawIcon3D","revid":378664,"updated":"2026-05-18T18:59:17Z","groups":["Interaction"],"status":"ok","replaced_by":[],"games":[{"game":"arma3","name":"Arma 3","version":"0.50"}],"since":{"game":"arma3","name":"Arma 3","version":"0.50"},"arma3_since":"0.50","branch":null,"locality":{"argument":null,"effect":"local","server_exec":false},"exec":null,"description":"Draws an icon at the given position in the game world. This command has to be executed every frame. Use the Draw3D Mission Event Handler (which is executed every frame if the user can see the icon).\n\nIn order for the results of this command to be visible through a custom camera, enable HUD with cameraEffectEnableHUD.\n\n`showHUD false` will hide the icon drawn by this command.\n\nIn order for arrows to appear, the icon texture should exist. The arrow size is proportionate to the icon size.\n\n> [!NOTE]\n> - To avoid flickering and ensure visual fidelity, always use the visual (render time scope) variant of position commands, such as getPosASLVisual.\n> - The *width* and *height* parameters are multipliers for `activeWidth` and `activeHeight` set in config. So for example, if one needs to create an icon half the screen wide (`safeZoneW / 2`) and half the screen tall (`safeZoneH / 2`), divide these by the according config values: \n>\n> ```sqf\n> private _iconWidth = (safeZoneW / 2) / getNumber (configFile >> \"CfgInGameUI\" >> \"Cursor\" >> \"activeWidth\");\n> private _iconHeight = (safeZoneH / 2) / getNumber (configFile >> \"CfgInGameUI\" >> \"Cursor\" >> \"activeHeight\");\n> ```","syntaxes":[{"syntax":"drawIcon3D [texture, color, position, width, height, angle, text, shadow, textSize, font, textAlign, drawSideArrows, offsetX, offsetY]","since":null,"effect":null,"exec":null,"params":[{"name":"texture","type":"String","optional":false,"default":null,"description":"icon texture","types":["String"],"since":null,"text":"texture: String - icon texture"},{"name":"color","type":null,"optional":false,"default":null,"description":"Color (RGBA) or Array of two Color (RGBA)\n- Color (RGBA) - icon color\n- Arma 3 v2.04 Array of two Arrays format Color (RGBA) - Icon and text color","types":["Color","Array"],"since":null,"text":"color: Color (RGBA) or Array of two Color (RGBA)\n- Color (RGBA) - icon color\n- Arma 3 v2.04 Array of two Arrays format Color (RGBA) - Icon and text color"},{"name":"position","type":"PositionAGL","optional":false,"default":null,"description":"icon position","types":["PositionAGL"],"since":null,"text":"position: PositionAGL - icon position"},{"name":"width","type":"Number","optional":false,"default":null,"description":"icon width","types":["Number"],"since":null,"text":"width: Number - icon width"},{"name":"height","type":"Number","optional":false,"default":null,"description":"icon height","types":["Number"],"since":null,"text":"height: Number - icon height"},{"name":"angle","type":"Number","optional":false,"default":null,"description":"icon rotation angle","types":["Number"],"since":null,"text":"angle: Number - icon rotation angle"},{"name":"text","type":"String","optional":true,"default":"\"\"","description":"text label to display next to the icon","types":["String"],"since":null,"text":"text: String - (Optional, default \"\") text label to display next to the icon"},{"name":"shadow","type":null,"optional":true,"default":"0","description":"Number:\n  - **0:** no shadow\n  - **1:** shadow (not used in this context, used in UI context)\n  - **2:** outline\n- Boolean:\n  - true - outline\n  - false - no shadow","types":[],"since":null,"text":"shadow: (Optional, default 0)\n- Number:\n  - **0:** no shadow\n  - **1:** shadow (not used in this context, used in UI context)\n  - **2:** outline\n- Boolean:\n  - true - outline\n  - false - no shadow"},{"name":"textSize","type":"Number","optional":true,"default":"size of system","description":"text size","types":["Number"],"since":null,"text":"textSize: Number - (Optional, default size of system) text size"},{"name":"font","type":"String","optional":true,"default":"\"RobotoCondensedBold\"","description":"font class name from `CfgFontFamilies` (see FXY File Format#Available Fonts)","types":["String"],"since":null,"text":"font: String - (Optional, default \"RobotoCondensedBold\") font class name from `CfgFontFamilies` (see FXY File Format#Available Fonts)"},{"name":"textAlign","type":"String","optional":true,"default":"\"center\"","description":"text alignment, can be one of:\n- \"left\" - aligns the end of text line with the given position (text appears to the left of the position)\n- \"right\" - aligns the beginning of text line with the given position (text appears to the right of the position)\n- \"center\" - aligns the middle of text line with the given position (text appears central to the position)","types":["String"],"since":null,"text":"textAlign: String - (Optional, default \"center\") text alignment, can be one of:\n- \"left\" - aligns the end of text line with the given position (text appears to the left of the position)\n- \"right\" - aligns the beginning of text line with the given position (text appears to the right of the position)\n- \"center\" - aligns the middle of text line with the given position (text appears central to the position)"},{"name":"drawSideArrows","type":"Boolean","optional":true,"default":"false","description":"true to draw arrows and the text label at edge of screen when the icon moves off the screen","types":["Boolean"],"since":null,"text":"drawSideArrows: Boolean - (Optional, default false) true to draw arrows and the text label at edge of screen when the icon moves off the screen"},{"name":"offsetX","type":"Number","optional":true,"default":"0","description":"X offset for the icon text","types":["Number"],"since":"arma3 2.04","text":"offsetX: Number - (Optional, default 0) X offset for the icon text"},{"name":"offsetY","type":"Number","optional":true,"default":"0","description":"Y offset for the icon text","types":["Number"],"since":"arma3 2.04","text":"offsetY: Number - (Optional, default 0) Y offset for the icon text"}],"returns":{"type":"Nothing","types":["Nothing"],"description":null,"text":"Nothing"},"form":"unary","operator":null,"left":null,"right":{"text":"[texture, color, position, width, height, angle, text, shadow, textSize, font, textAlign, drawSideArrows, offsetX, offsetY]","types":["Array"]}},{"syntax":"drawIcon3D icon","since":"arma3 2.22","effect":null,"exec":null,"params":[{"name":"icon","type":"HashMap","optional":true,"default":"0","description":"hashmap structure in the following **case-sensitive**, @-prefixed format:\n- @position: Array - the only mandatory parameter, can be one of the following formats:\n  - [x, y, (z:0)] - Position2D or PositionAGL\n  - [object, offsetZ]\n    - object: Object\n    - offsetZ: Number vertical offset\n  - [object, selection, offsetZ, lodIndex]\n    - object: Object\n    - selection: String - model selection, see animationNames, selectionNames\n    - offsetZ: Number -  vertical offset\n    - lodIndex: Number - (Optional, default Memory LOD index, see allLODs)\n- @texture: String - (Optional, default \"\") icon image\n- @size: Number - (Optional) texture sizeH, the sizeW is automatic, based on original texture dimensions (To find texture width use getTextureInfo)\n- @font: String - (Optional) global font name. Default current system font.\n- @color: Color - (Optional, default White) icon color\n- @shadow: Number - (Optional, default 0) could be one of the following:\n  - 0 - no shadow\n  - 1 - normal shadow (slight offset to the right and bottom)\n  - 2 - outline ('@shadowColor' does not work here, this outline is always black)\n  - 3 - thicker shadow (offset to the right and bottom, dynamic, approx 1.5% of the icon (w+h)/2)\n  - 4 - thicker outline (dynamic, approx 1.5% of the icon (w+h)/2)\n- @shadowColor: Color - (Optional, default [0,0,0,0]) '@shadow' color (see above)\n- @fade: Array - (Optional, default [-1, -1]) in format [distMin, distMax] start and end distance of icon fade\n- @dynamic: Boolean - (Optional, default false) true to change icon size dynamically with percieved view distance false static size\n- @offsetX: Number - (Optional, default 0) x offset in screen units. > 0 offset right, < 0 offset left (always 0 if @drawArrows true)\n- @offsetY: Number - (Optional, default 0) y offset in screen units. > 0 offset down, < 0 offset up (always 0 if @drawArrows true)\n- @hardAlpha: Number - (Optional, default -1) 0..1 global alpha override for entire icon\n- @checkVisibility: Boolean - (Optional, default false) true the icon will be obstructed by objects, smoke and vegetation\n- @drawArrows: Boolean - (Optional, default false) true to draw side out of view arrows and text for static icons only. Always false if @dynamic true\n- @arrowTexture: String - (Optional, default \"\\a3\\Ui_f\\data\\IGUI\\Cfg\\Cursors\\outArrow_ca.paa\") arrow texture\n- @arrowSize: Number - (Optional, default @size) arrow size, capped if smaller than @arrowText size\n- @arrowColor: Color - (Optional, default @color) arrow color\n- @arrowText: Array - (Optional, default []) text to draw next to side arrows for static icons only in format [text, size, offsetXCoef, offsetYCoef, color, shadow]:\n  - text: String - text to show next to arrow\n  - size: Number - (Optional, default current system font size) text height in screen units (To find text width use getTextWidth)\n  - offsetXCoef: Number - (Optional, default 1) X-spacing coefficient between arrows and text\n  - offsetYCoef: Number - (Optional, default 1) Y-spacing coefficient between arrows and text\n  - color: Color (Optional, default White) text color\n  - shadow: Boolean (Optional, default false) true to outline, false no shadow\n- @texts: Array of Arrays - (Optional, default []) multiple visible texts in format [[text, size, offsetX, offsetY, color, shadow], ...]:\n  - text: String - text to show\n  - size: Number - (Optional, default current system font size) text height in screen units (To find text width use getTextWidth)\n  - offsetX: Number - (Optional, default 0) x offset in screen units. > 0 offset right, < 0 offset left\n  - offsetY: Number - (Optional, default 0) y offset in screen units. > 0 offset down, < 0 offset up\n  - color: Color (Optional, default White) text color\n  - shadow: Boolean (Optional, default false) true to outline, false no shadow\n- @progress: Array - (Optional, default []) progress bar in format [width, height, offsetX, offsetY, colorFG, colorBG]:\n  - width: Number - width of the progress bar in screen units (width < height - vertical bar)\n  - height: Number - height of the progress bar in screen units (height <= width - horizontal bar)\n  - offsetX: Number - (Optional, default 0) x offset\n  - offsetY: Number - (Optional, default 0) y offset\n  - colorFG: Color - (Optional, default White) forground color\n  - colorBG: Color - (Optional, default Grey) background color\n- @progressValue: Number - (Optional, default -1) progress bar progress in 0...1 range. -1 - progress bar is not drawn","types":["HashMap"],"since":null,"text":"icon: HashMap - hashmap structure in the following **case-sensitive**, @-prefixed format:\n- @position: Array - the only mandatory parameter, can be one of the following formats:\n  - [x, y, (z:0)] - Position2D or PositionAGL\n  - [object, offsetZ]\n    - object: Object\n    - offsetZ: Number vertical offset\n  - [object, selection, offsetZ, lodIndex]\n    - object: Object\n    - selection: String - model selection, see animationNames, selectionNames\n    - offsetZ: Number - (Optional, default 0) vertical offset\n    - lodIndex: Number - (Optional, default Memory LOD index, see allLODs)\n- @texture: String - (Optional, default \"\") icon image\n- @size: Number - (Optional) texture sizeH, the sizeW is automatic, based on original texture dimensions (To find texture width use getTextureInfo)\n- @font: String - (Optional) global font name. Default current system font.\n- @color: Color - (Optional, default White) icon color\n- @shadow: Number - (Optional, default 0) could be one of the following:\n  - 0 - no shadow\n  - 1 - normal shadow (slight offset to the right and bottom)\n  - 2 - outline ('@shadowColor' does not work here, this outline is always black)\n  - 3 - thicker shadow (offset to the right and bottom, dynamic, approx 1.5% of the icon (w+h)/2)\n  - 4 - thicker outline (dynamic, approx 1.5% of the icon (w+h)/2)\n- @shadowColor: Color - (Optional, default [0,0,0,0]) '@shadow' color (see above)\n- @fade: Array - (Optional, default [-1, -1]) in format [distMin, distMax] start and end distance of icon fade\n- @dynamic: Boolean - (Optional, default false) true to change icon size dynamically with percieved view distance false static size\n- @offsetX: Number - (Optional, default 0) x offset in screen units. > 0 offset right, < 0 offset left (always 0 if @drawArrows true)\n- @offsetY: Number - (Optional, default 0) y offset in screen units. > 0 offset down, < 0 offset up (always 0 if @drawArrows true)\n- @hardAlpha: Number - (Optional, default -1) 0..1 global alpha override for entire icon\n- @checkVisibility: Boolean - (Optional, default false) true the icon will be obstructed by objects, smoke and vegetation\n- @drawArrows: Boolean - (Optional, default false) true to draw side out of view arrows and text for static icons only. Always false if @dynamic true\n- @arrowTexture: String - (Optional, default \"\\a3\\Ui_f\\data\\IGUI\\Cfg\\Cursors\\outArrow_ca.paa\") arrow texture\n- @arrowSize: Number - (Optional, default @size) arrow size, capped if smaller than @arrowText size\n- @arrowColor: Color - (Optional, default @color) arrow color\n- @arrowText: Array - (Optional, default []) text to draw next to side arrows for static icons only in format [text, size, offsetXCoef, offsetYCoef, color, shadow]:\n  - text: String - text to show next to arrow\n  - size: Number - (Optional, default current system font size) text height in screen units (To find text width use getTextWidth)\n  - offsetXCoef: Number - (Optional, default 1) X-spacing coefficient between arrows and text\n  - offsetYCoef: Number - (Optional, default 1) Y-spacing coefficient between arrows and text\n  - color: Color (Optional, default White) text color\n  - shadow: Boolean (Optional, default false) true to outline, false no shadow\n- @texts: Array of Arrays - (Optional, default []) multiple visible texts in format [[text, size, offsetX, offsetY, color, shadow], ...]:\n  - text: String - text to show\n  - size: Number - (Optional, default current system font size) text height in screen units (To find text width use getTextWidth)\n  - offsetX: Number - (Optional, default 0) x offset in screen units. > 0 offset right, < 0 offset left\n  - offsetY: Number - (Optional, default 0) y offset in screen units. > 0 offset down, < 0 offset up\n  - color: Color (Optional, default White) text color\n  - shadow: Boolean (Optional, default false) true to outline, false no shadow\n- @progress: Array - (Optional, default []) progress bar in format [width, height, offsetX, offsetY, colorFG, colorBG]:\n  - width: Number - width of the progress bar in screen units (width < height - vertical bar)\n  - height: Number - height of the progress bar in screen units (height <= width - horizontal bar)\n  - offsetX: Number - (Optional, default 0) x offset\n  - offsetY: Number - (Optional, default 0) y offset\n  - colorFG: Color - (Optional, default White) forground color\n  - colorBG: Color - (Optional, default Grey) background color\n- @progressValue: Number - (Optional, default -1) progress bar progress in 0...1 range. -1 - progress bar is not drawn"}],"returns":{"type":"Nothing","types":["Nothing"],"description":null,"text":"Nothing"},"form":"unary","operator":null,"left":null,"right":{"text":"icon","types":["HashMap"]}}],"examples":[{"text":"Icon and text:\n\n```sqf\naddMissionEventHandler [\"Draw3D\", {\n    drawIcon3D [\"targetIcon.paa\", [1, 1, 1, 1], ASLToAGL getPosASLVisual cursorTarget, 1, 1, 45, \"Target\", 1, 0.05, \"TahomaB\"];\n}];\n```","code":["addMissionEventHandler [\"Draw3D\", {\n\tdrawIcon3D [\"targetIcon.paa\", [1, 1, 1, 1], ASLToAGL getPosASLVisual cursorTarget, 1, 1, 45, \"Target\", 1, 0.05, \"TahomaB\"];\n}];"]},{"text":"Just text:\n\n```sqf\naddMissionEventHandler [\"Draw3D\", {\n    drawIcon3D [\"\", [1, 0, 0, 1], ASLToAGL getPosASLVisual cursorTarget, 0, 0, 0, \"Target\", 1, 0.05, \"PuristaMedium\"];\n}];\n```","code":["addMissionEventHandler [\"Draw3D\", {\n\tdrawIcon3D [\"\", [1, 0, 0, 1], ASLToAGL getPosASLVisual cursorTarget, 0, 0, 0, \"Target\", 1, 0.05, \"PuristaMedium\"];\n}];"]},{"text":"```sqf\niconPos = player getPos [10, 0] vectorAdd [0,0,2];\naddMissionEventHandler [\"draw3D\",\n{\n    drawIcon3D\n    [\n        \"\\a3\\ui_f\\data\\IGUI\\Cfg\\Radar\\radar_ca.paa\",\n        [0, 0, 1, 1],\n        iconPos,\n        5,\n        5,\n        getDirVisual player,\n        \"COMPASS\",\n        0,\n        0.3,\n        \"PuristaMedium\",\n        \"center\",\n        true\n    ];\n}];\n```","code":["iconPos = player getPos [10, 0] vectorAdd [0,0,2];\naddMissionEventHandler [\"draw3D\",\n{\n\tdrawIcon3D\n\t[\n\t\t\"\\a3\\ui_f\\data\\IGUI\\Cfg\\Radar\\radar_ca.paa\",\n\t\t[0, 0, 1, 1],\n\t\ticonPos,\n\t\t5,\n\t\t5,\n\t\tgetDirVisual player,\n\t\t\"COMPASS\",\n\t\t0,\n\t\t0.3,\n\t\t\"PuristaMedium\",\n\t\t\"center\",\n\t\ttrue\n\t];\n}];"]},{"text":"Since Arma 3 v2.04\n\n```sqf\npos = player getPos [10, 0] vectorAdd [0,0,2];\naddMissionEventHandler [\"draw3D\",\n{\n    _k = 10 / (player distance pos);\n    drawIcon3D\n    [\n        \"\\a3\\ui_f\\data\\IGUI\\Cfg\\Radar\\radar_ca.paa\",\n        [1, 0, 0, 1],\n        pos,\n        1 * _k,\n        1 * _k,\n        0,\n        name player,\n        0,\n        0.04 * _k,\n        \"RobotoCondensed\",\n        \"right\",\n        true,\n        0.005 * _k,\n        -0.035 * _k\n    ];\n}];\n```","code":["pos = player getPos [10, 0] vectorAdd [0,0,2];\naddMissionEventHandler [\"draw3D\",\n{\n\t_k = 10 / (player distance pos);\n\tdrawIcon3D\n\t[\n\t\t\"\\a3\\ui_f\\data\\IGUI\\Cfg\\Radar\\radar_ca.paa\",\n\t\t[1, 0, 0, 1],\n\t\tpos,\n\t\t1 * _k,\n\t\t1 * _k,\n\t\t0,\n\t\tname player,\n\t\t0,\n\t\t0.04 * _k,\n\t\t\"RobotoCondensed\",\n\t\t\"right\",\n\t\ttrue,\n\t\t0.005 * _k,\n\t\t-0.035 * _k\n\t];\n}];"]},{"text":"Since Arma 3 v2.22\n\n```sqf\nremoveAllMissionEventHandlers \"Draw3D\"; \ndeleteVehicle flagA; \nflagA = createVehicle [\"Flag_AAF_F\", position player, [], 0, \"NONE\"]; \nicon = createHashMapFromArray \n[ \n    [\"@position\", [flagA, 5]], \n    [\"@texture\", \"\\A3\\Data_F\\Flags\\Flag_AAF_CO.paa\"], \n    [\"@texts\", [[\"Sector Alpha\", 0.025, 0, 0.05, [1,1,0,1]]]], \n    [\"@size\", 0.05], \n    [\"@drawArrows\", true], \n    [\"@arrowText\", [\"A\", 0.04, 0.5, 0.3, [1,1,0,1]]],\n    [\"@arrowSize\", 0.06], \n    [\"@fade\", [10, 100]], \n    [\"@arrowColor\", [0,1,0,1]], \n    [\"@progress\", [0.005, 0.05, -0.01, 0, [0.8,0.8,0,1], [0,0.6,0,0.6]]], \n    [\"@progressValue\", 0.67] \n]; \naddMissionEventHandler [\"Draw3D\", {drawIcon3D icon}];\n```","code":["removeAllMissionEventHandlers \"Draw3D\"; \ndeleteVehicle flagA; \nflagA = createVehicle [\"Flag_AAF_F\", position player, [], 0, \"NONE\"]; \nicon = createHashMapFromArray \n[ \n\t[\"@position\", [flagA, 5]], \n\t[\"@texture\", \"\\A3\\Data_F\\Flags\\Flag_AAF_CO.paa\"], \n\t[\"@texts\", [[\"Sector Alpha\", 0.025, 0, 0.05, [1,1,0,1]]]], \n\t[\"@size\", 0.05], \n\t[\"@drawArrows\", true], \n\t[\"@arrowText\", [\"A\", 0.04, 0.5, 0.3, [1,1,0,1]]],\n\t[\"@arrowSize\", 0.06], \n\t[\"@fade\", [10, 100]], \n\t[\"@arrowColor\", [0,1,0,1]], \n\t[\"@progress\", [0.005, 0.05, -0.01, 0, [0.8,0.8,0,1], [0,0.6,0,0.6]]], \n\t[\"@progressValue\", 0.67] \n]; \naddMissionEventHandler [\"Draw3D\", {drawIcon3D icon}];"]}],"multiplayer":null,"problems":null,"aliases":[],"see_also":["drawLine3D","getMissionPath","showHUD","cameraEffectEnableHUD"],"notes":[{"user":"Killzone_Kid","date":"2013-08-31T09:51:00Z","text":"As command syntax indicates, this command expects icon position in format PositionAGL meaning that over the land it expects PositionATL and over the sea PositionASLW.\n\nThis command works well with addon textures, however getting it to display mission textures is a bit tricky. Follow [this guide](http://killzonekid.com/arma-scripting-tutorials-mission-root/)."},{"user":"AgentRev","date":"2014-04-19T22:35:00Z","text":"You should rely exclusively on modelToWorldVisual for a moving object's icon position if you want it to accurately stay at the correct height over the sea. It computes faster than ASLToAGL.\n\nWidth, height, and textSize are proportional to the user's interface size, which can optionally be compensated against via `size / (getResolution select 5)`\n\nAdditionally, width and height are inversely proportional to the `fovLeft` and `fovTop` parameters from the user's ArmaProfile, and AFAIK those parameters are not retrievable via scripting.\nFor example, a `fovTop` higher than the default value of 0.75 will make all 3D icons smaller vertically. I'm not sure if this is a bug or by design, however it is definitely annoying to take into account."},{"user":"DreadedEntity","date":"2014-10-23T02:42:00Z","text":"drawIcon3D and BIS_fnc_addStackedEventHandler work well together.\n\nUsing formatting commands with drawIcon3D will not work, instead, they will be added to the string.\n\n```sqf\n[\"uniqueID\", \"onEachFrame\",\n{\n    drawIcon3D [\"myIcon.jpg\", [1,1,1,0.5], getPos player, 1, 1, 0, format [\"%1\\n%2\", \"Dreaded\", \"Entity\"]];\n}] call BIS_fnc_addStackedEventHandler;\n```\n\nShown text will be **Dreaded\\nEntity**. **(A3 1.32.127785)**\n\nThe \"text\" parameter must be a string. You cannot use Structured_Text.\n\n```sqf\n[\"uniqueID\", \"onEachFrame\",\n{\n    drawIcon3D\n    [\n        \"myIcon.jpg\",\n        [1,1,1,0.5],\n        getPos player,\n        1,\n        1,\n        0,\n        parseText format [\"<t size='1.25' font='PuristaLight' color='#ff0000'>%1%2</t>\", Dreaded, Entity]\n    ];\n}] call BIS_fnc_addStackedEventHandler;\n```\n\n**(A3 1.32.127785)**\n\n> [!CAUTION]\n> This information is **obsolete**."},{"user":"PierreMGI","date":"2016-03-22T20:38:00Z","text":"If you want to use this command, on each frame, with plenty of objects or entities to mark, you can manage conditions in order to reduce the number of CPU operations.\nOne of the most demanding CPU resource is probably a DrawIcon3D treatment for these objects/entities because even if not displayed (like for objects behind player), the CPU calculates the icons in the defined radius of your nearEntities / nearestObjects command.\nDon't stay with a simple radius condition (disk selecting entities or nearestObjects) which calculates all, then useless (not displayed), icons!\n\nHere is a way to restrict this command to your screen display:\nin a onEachFramed context:\n\n```sqf\nunitsToDisplay = allUnits;\naddMissionEventHandler [\"EachFrame\", {\n    private _offset = [0,0,0];\n    {\n        private _screenPosition = worldToScreen (_x modelToWorldVisual _offset);\n        if (_screenPosition isEqualTo []) then { continue };\n        // < your drawIcon3D treatment here >\n    } foreach unitsToDisplay\n}];\n```\n\nTested with +100 units, equally spread on a disk. (Note: FPS depend also on environment in map. Choose a \"desert\" for that)."}],"categories":["Arma 3: New Scripting Commands","Arma 3: Scripting Commands","Command Group: Interaction","Introduced with Arma 3 version 0.50","Scripting Commands","Scripting Commands: Local Effect"]}