Buckets:

HuggingFaceDocBuilder's picture
download
raw
72.5 kB
import{s as Os,n as Ks,o as ei}from"../chunks/scheduler.2b22cead.js";import{S as ti,i as li,e as d,s,c as a,h as ni,a as y,d as l,b as i,f as Yt,g as p,j as U,k as rs,l as u,m as n,n as M,t as o,o as r,p as c}from"../chunks/index.1a0e8013.js";import{C as si,H as m,E as ii}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.b9cb86dd.js";import{C as w}from"../chunks/CodeBlock.f113894f.js";function ai(cs){let h,Xt,Nt,Ht,b,xt,$,_t,f,ms='OpenEnv wrapper for <a href="https://github.com/Unity-Technologies/ml-agents" rel="nofollow">Unity ML-Agents</a> environments. This environment provides access to Unity’s reinforcement learning environments through a standardized HTTP/WebSocket interface.',Lt,j,ds='<img src="https://raw.githubusercontent.com/huggingface/OpenEnv/main/envs/unity_env/assets/unity_pushblock.gif" alt="PushBlock" width="400"/> <img src="https://raw.githubusercontent.com/huggingface/OpenEnv/main/envs/unity_env/assets/unity_3dball.gif" alt="3DBall" width="400"/>',Dt,C,Ft,g,ys="<thead><tr><th>Environment</th> <th>Action Type</th> <th>Description</th></tr></thead> <tbody><tr><td><strong>PushBlock</strong></td> <td>Discrete (7)</td> <td>Push a block to a goal position</td></tr> <tr><td><strong>3DBall</strong></td> <td>Continuous (2)</td> <td>Balance a ball on a platform</td></tr> <tr><td><strong>3DBallHard</strong></td> <td>Continuous (2)</td> <td>Harder version of 3DBall</td></tr> <tr><td><strong>GridWorld</strong></td> <td>Discrete (5)</td> <td>Navigate a grid to find goals</td></tr> <tr><td><strong>Basic</strong></td> <td>Discrete (3)</td> <td>Simple left/right movement</td></tr></tbody>",qt,I,Us="More environments may be available depending on the ML-Agents registry version.",Pt,v,Ot,B,Kt,G,el,R,ws='<li>Python 3.10+</li> <li><a href="https://docs.astral.sh/uv/" rel="nofollow">uv</a> (recommended) or pip</li>',tl,W,ll,Z,nl,k,sl,z,il,V,al,E,pl,A,us="<strong>Note:</strong> The first run will download Unity environment binaries (~500MB). These are cached in <code>~/.mlagents-cache/</code> for future use.",Ml,S,ol,N,rl,Q,Ts="<li>Docker installed and running</li> <li>Python 3.10+ (for running the client)</li>",cl,Y,ml,X,dl,H,hs='<strong>Note for Apple Silicon (M1/M2/M3/M4) users:</strong> Docker mode is <strong>not supported</strong> on Apple Silicon because Unity’s Mono runtime crashes under x86_64 emulation. Use <strong>direct mode</strong> (<code>--direct</code>) or <strong>server mode</strong> (<code>--url</code>) instead, which run native macOS binaries. See <a href="#docker-mode-fails-on-apple-silicon-m1m2m3m4">Troubleshooting</a> for details.',yl,x,Ul,_,wl,L,ul,D,Js="To connect to the Docker container, install the client on your host machine:",Tl,F,hl,q,Jl,P,jl,O,js="Run the Unity environment directly without a server:",bl,K,$l,ee,fl,te,bs="Start the server and connect with a client:",Cl,le,gl,ne,Il,se,$s="Run via Docker container (auto-starts and connects):",vl,ie,Bl,ae,Gl,pe,Rl,Me,Wl,oe,Zl,re,kl,ce,zl,me,Vl,de,El,ye,Al,Ue,Sl,we,Nl,ue,Ql,Te,Yl,he,Xl,Je,Hl,je,fs="<thead><tr><th>Option</th> <th>Default</th> <th>Description</th></tr></thead> <tbody><tr><td><code>--direct</code></td> <td>-</td> <td>Run environment directly (no server)</td></tr> <tr><td><code>--docker</code></td> <td>-</td> <td>Run via Docker container</td></tr> <tr><td><code>--url</code></td> <td>localhost:8000</td> <td>Server URL for server mode</td></tr> <tr><td><code>--docker-image</code></td> <td>unity-env:latest</td> <td>Docker image name</td></tr> <tr><td><code>--env</code></td> <td>PushBlock</td> <td>Environment: PushBlock, 3DBall, both</td></tr> <tr><td><code>--episodes</code></td> <td>3</td> <td>Number of episodes</td></tr> <tr><td><code>--max-steps</code></td> <td>500</td> <td>Max steps per episode</td></tr> <tr><td><code>--width</code></td> <td>1280</td> <td>Window width in pixels</td></tr> <tr><td><code>--height</code></td> <td>720</td> <td>Window height in pixels</td></tr> <tr><td><code>--no-graphics</code></td> <td>-</td> <td>Headless mode (faster)</td></tr> <tr><td><code>--time-scale</code></td> <td>1.0</td> <td>Simulation speed multiplier</td></tr> <tr><td><code>--quality-level</code></td> <td>5</td> <td>Graphics quality 0-5</td></tr> <tr><td><code>--quiet</code></td> <td>-</td> <td>Reduce output verbosity</td></tr></tbody>",xl,be,_l,$e,Ll,fe,Dl,Ce,Fl,ge,ql,Ie,Pl,ve,Ol,Be,Kl,Ge,en,Re,tn,We,ln,Ze,Cs="7 discrete actions:",nn,ke,gs="<li><code>0</code>: No operation</li> <li><code>1</code>: Move forward</li> <li><code>2</code>: Move backward</li> <li><code>3</code>: Rotate left</li> <li><code>4</code>: Rotate right</li> <li><code>5</code>: Strafe left</li> <li><code>6</code>: Strafe right</li>",sn,ze,an,Ve,pn,Ee,Is="2 continuous actions in range [-1, 1]:",Mn,Ae,vs="<li>Action 0: X-axis rotation</li> <li>Action 1: Z-axis rotation</li>",on,Se,rn,Ne,cn,Qe,Bs="All environments provide vector observations. The size depends on the environment:",mn,Ye,Gs="<li><strong>PushBlock</strong>: 70 dimensions (14 ray-casts detecting walls/goals/blocks)</li> <li><strong>3DBall</strong>: 8 dimensions (rotation and ball position/velocity)</li> <li><strong>GridWorld</strong>: Visual observations (grid view)</li>",dn,Xe,yn,He,Un,xe,Rs="Some environments support visual observations. Enable with <code>include_visual=True</code>:",wn,_e,un,Le,Tn,De,hn,Fe,Ws="When using <code>UnityEnv.from_direct()</code> to run with an embedded server:",Jn,qe,jn,Pe,bn,Oe,Zs="For Docker deployment, configure via environment variables:",$n,Ke,ks="<thead><tr><th>Variable</th> <th>Default</th> <th>Description</th></tr></thead> <tbody><tr><td><code>UNITY_ENV_ID</code></td> <td>PushBlock</td> <td>Default Unity environment</td></tr> <tr><td><code>UNITY_NO_GRAPHICS</code></td> <td>0</td> <td>Set to 1 for headless mode</td></tr> <tr><td><code>UNITY_WIDTH</code></td> <td>1280</td> <td>Window width in pixels</td></tr> <tr><td><code>UNITY_HEIGHT</code></td> <td>720</td> <td>Window height in pixels</td></tr> <tr><td><code>UNITY_TIME_SCALE</code></td> <td>1.0</td> <td>Simulation speed multiplier</td></tr> <tr><td><code>UNITY_QUALITY_LEVEL</code></td> <td>5</td> <td>Graphics quality 0-5</td></tr> <tr><td><code>UNITY_CACHE_DIR</code></td> <td>~/.mlagents-cache</td> <td>Binary cache directory</td></tr></tbody>",fn,et,Cn,tt,zs="Access detailed environment information:",gn,lt,In,nt,vn,st,Bn,it,Vs="<strong>Symptom:</strong> When running with <code>--docker</code> on Apple Silicon Macs, you see an error like:",Gn,at,Rn,pt,Es="Or in Docker logs:",Wn,Mt,Zn,ot,As="<strong>Cause:</strong> Unity ML-Agents binaries are x86_64 (Intel) only. When Docker runs the x86_64 Linux container on Apple Silicon, it uses QEMU emulation. The Mono runtime inside Unity has architecture-specific code that crashes under emulation.",kn,rt,Ss="<strong>Solutions:</strong>",zn,T,J,kt,Ns="<strong>Use Direct Mode</strong> (recommended for macOS):",is,ct,as,zt,Qs="Direct mode downloads native macOS binaries which work on Apple Silicon.",ps,mt,Vt,Ys="<strong>Use Server Mode</strong> with a local server:",Ms,dt,os,Et,Xs=`<p><strong>Use an x86_64 Linux machine</strong> for Docker mode:
The Docker image works correctly on native x86_64 Linux machines (cloud VMs, dedicated servers, etc.).</p>`,Vn,yt,En,Ut,Hs="The first run downloads Unity binaries (~500MB). This is normal and only happens once. Binaries are cached in <code>~/.mlagents-cache/</code>.",An,wt,Sn,ut,xs="<li>Ensure <code>--no-graphics</code> is NOT set</li> <li>On Linux, ensure X11 is available</li> <li>For Docker, you may need to set up X11 forwarding</li>",Nn,Tt,Qn,ht,Yn,Jt,Xn,jt,Hn,bt,xn,$t,_s="The <code>mlagents-envs</code> and <code>mlagents</code> packages are installed from source by default (via the GitHub repository). If you encounter issues or want to install manually:",_n,ft,Ln,Ct,Ls="This approach is useful when:",Dn,gt,Ds="<li>You need to modify the mlagents source code</li> <li>You want to use a specific branch or commit</li> <li>The git dependency in pyproject.toml is causing issues</li>",Fn,It,qn,vt,Fs="<li><strong>First Run Download</strong>: Unity binaries (~500MB) are downloaded on first use</li> <li><strong>Platform-Specific</strong>: Binaries are platform-specific (macOS, Linux, Windows)</li> <li><strong>Apple Silicon + Docker</strong>: Docker mode does not work on Apple Silicon Macs due to x86_64 emulation issues with Unity’s Mono runtime. Use direct mode or server mode instead.</li> <li><strong>Single Worker</strong>: Unity environments are not thread-safe; use <code>workers=1</code></li> <li><strong>Graphics Mode</strong>: Some features require X11/display for graphics mode</li> <li><strong>Multi-Agent</strong>: Currently uses first agent only; full multi-agent support planned</li>",Pn,Bt,On,Gt,qs="<li><code>mlagents-envs</code> (installed from source via git)</li> <li><code>mlagents</code> (installed from source via git)</li> <li><code>numpy&gt;=1.20.0</code></li> <li><code>pillow&gt;=9.0.0</code> (for visual observations)</li> <li><code>openenv[core]&gt;=0.2.0</code></li>",Kn,Rt,es,Wt,Ps='<li><a href="https://docs.unity3d.com/Packages/com.unity.ml-agents@4.0/manual/index.html" rel="nofollow">Unity ML-Agents Documentation</a></li> <li><a href="https://github.com/Unity-Technologies/ml-agents" rel="nofollow">ML-Agents GitHub</a></li> <li><a href="https://docs.unity3d.com/Packages/com.unity.ml-agents@4.0/manual/Learning-Environment-Examples.html" rel="nofollow">Example Environments</a></li>',ts,Zt,ls,Qt,ns;return b=new si({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),$=new m({props:{title:"Unity ML-Agents Environment",local:"unity-ml-agents-environment",headingTag:"h1"}}),C=new m({props:{title:"Supported Environments",local:"supported-environments",headingTag:"h2"}}),v=new m({props:{title:"Installation",local:"installation",headingTag:"h2"}}),B=new m({props:{title:"Option 1: Non-Docker Installation (Local Development)",local:"option-1-non-docker-installation-local-development",headingTag:"h3"}}),G=new m({props:{title:"Prerequisites",local:"prerequisites",headingTag:"h4"}}),W=new m({props:{title:"Install from OpenEnv Repository",local:"install-from-openenv-repository",headingTag:"h4"}}),Z=new w({props:{code:"JTIzJTIwQ2xvbmUlMjB0aGUlMjBPcGVuRW52JTIwcmVwb3NpdG9yeSUyMChpZiUyMG5vdCUyMGFscmVhZHklMjBkb25lKSUwQWdpdCUyMGNsb25lJTIwaHR0cHMlM0ElMkYlMkZnaXRodWIuY29tJTJGeW91ci1vcmclMkZPcGVuRW52LmdpdCUwQWNkJTIwT3BlbkVudiUwQSUwQSUyMyUyMEluc3RhbGwlMjB0aGUlMjB1bml0eV9lbnYlMjBwYWNrYWdlJTIwd2l0aCUyMGRlcGVuZGVuY2llcyUwQWNkJTIwZW52cyUyRnVuaXR5X2VudiUwQXV2JTIwcGlwJTIwaW5zdGFsbCUyMC1lJTIwLiUwQSUwQSUyMyUyME9yJTIwd2l0aCUyMHBpcCUwQXBpcCUyMGluc3RhbGwlMjAtZSUyMC4=",highlighted:`<span class="hljs-comment"># Clone the OpenEnv repository (if not already done)</span>
git <span class="hljs-built_in">clone</span> https://github.com/your-org/OpenEnv.git
<span class="hljs-built_in">cd</span> OpenEnv
<span class="hljs-comment"># Install the unity_env package with dependencies</span>
<span class="hljs-built_in">cd</span> envs/unity_env
uv pip install -e .
<span class="hljs-comment"># Or with pip</span>
pip install -e .`,lang:"bash",wrap:!1}}),k=new m({props:{title:"Install Dependencies Only",local:"install-dependencies-only",headingTag:"h4"}}),z=new w({props:{code:"Y2QlMjBlbnZzJTJGdW5pdHlfZW52JTBBJTBBJTIzJTIwVXNpbmclMjB1diUyMChyZWNvbW1lbmRlZCklMEF1diUyMHN5bmMlMEElMEElMjMlMjBPciUyMHVzaW5nJTIwcGlwJTBBcGlwJTIwaW5zdGFsbCUyMC1yJTIwcmVxdWlyZW1lbnRzLnR4dCUyMCUyMCUyMyUyMGlmJTIwYXZhaWxhYmxlJTBBcGlwJTIwaW5zdGFsbCUyMG1sYWdlbnRzLWVudnMlMjBudW1weSUyMHBpbGxvdyUyMGZhc3RhcGklMjB1dmljb3JuJTIwcHlkYW50aWM=",highlighted:`<span class="hljs-built_in">cd</span> envs/unity_env
<span class="hljs-comment"># Using uv (recommended)</span>
uv <span class="hljs-built_in">sync</span>
<span class="hljs-comment"># Or using pip</span>
pip install -r requirements.txt <span class="hljs-comment"># if available</span>
pip install mlagents-envs numpy pillow fastapi uvicorn pydantic`,lang:"bash",wrap:!1}}),V=new m({props:{title:"Verify Installation",local:"verify-installation",headingTag:"h4"}}),E=new w({props:{code:"JTIzJTIwVGVzdCUyMHRoZSUyMGluc3RhbGxhdGlvbiUwQWNkJTIwZW52cyUyRnVuaXR5X2VudiUwQXB5dGhvbiUyMC1jJTIwJTIyZnJvbSUyMGNsaWVudCUyMGltcG9ydCUyMFVuaXR5RW52JTNCJTIwcHJpbnQoJ0luc3RhbGxhdGlvbiUyMHN1Y2Nlc3NmdWwhJyklMjI=",highlighted:`<span class="hljs-comment"># Test the installation</span>
<span class="hljs-built_in">cd</span> envs/unity_env
python -c <span class="hljs-string">&quot;from client import UnityEnv; print(&#x27;Installation successful!&#x27;)&quot;</span>`,lang:"bash",wrap:!1}}),S=new m({props:{title:"Option 2: Docker Installation",local:"option-2-docker-installation",headingTag:"h3"}}),N=new m({props:{title:"Prerequisites",local:"prerequisites",headingTag:"h4"}}),Y=new m({props:{title:"Build the Docker Image",local:"build-the-docker-image",headingTag:"h4"}}),X=new w({props:{code:"Y2QlMjBlbnZzJTJGdW5pdHlfZW52JTBBJTBBJTIzJTIwQnVpbGQlMjB0aGUlMjBEb2NrZXIlMjBpbWFnZSUwQWRvY2tlciUyMGJ1aWxkJTIwLWYlMjBzZXJ2ZXIlMkZEb2NrZXJmaWxlJTIwLXQlMjB1bml0eS1lbnYlM0FsYXRlc3QlMjAuJTBBJTBBJTIzJTIwVmVyaWZ5JTIwdGhlJTIwYnVpbGQlMEFkb2NrZXIlMjBpbWFnZXMlMjAlN0MlMjBncmVwJTIwdW5pdHktZW52",highlighted:`<span class="hljs-built_in">cd</span> envs/unity_env
<span class="hljs-comment"># Build the Docker image</span>
docker build -f server/Dockerfile -t unity-env:latest .
<span class="hljs-comment"># Verify the build</span>
docker images | grep unity-env`,lang:"bash",wrap:!1}}),x=new m({props:{title:"Run the Docker Container",local:"run-the-docker-container",headingTag:"h4"}}),_=new w({props:{code:"JTIzJTIwUnVuJTIwd2l0aCUyMGRlZmF1bHQlMjBzZXR0aW5ncyUyMChncmFwaGljcyUyMGVuYWJsZWQlMkMlMjA4MDB4NjAwKSUwQWRvY2tlciUyMHJ1biUyMC1wJTIwODAwMCUzQTgwMDAlMjB1bml0eS1lbnYlM0FsYXRlc3QlMEElMEElMjMlMjBSdW4lMjB3aXRoJTIwY3VzdG9tJTIwc2V0dGluZ3MlMEFkb2NrZXIlMjBydW4lMjAtcCUyMDgwMDAlM0E4MDAwJTIwJTVDJTBBJTIwJTIwLWUlMjBVTklUWV9OT19HUkFQSElDUyUzRDAlMjAlNUMlMEElMjAlMjAtZSUyMFVOSVRZX1dJRFRIJTNEMTI4MCUyMCU1QyUwQSUyMCUyMC1lJTIwVU5JVFlfSEVJR0hUJTNENzIwJTIwJTVDJTBBJTIwJTIwLWUlMjBVTklUWV9USU1FX1NDQUxFJTNEMS4wJTIwJTVDJTBBJTIwJTIwdW5pdHktZW52JTNBbGF0ZXN0JTBBJTBBJTIzJTIwUnVuJTIwaW4lMjBoZWFkbGVzcyUyMG1vZGUlMjAoZmFzdGVyJTIwZm9yJTIwdHJhaW5pbmcpJTBBZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMCU1QyUwQSUyMCUyMC1lJTIwVU5JVFlfTk9fR1JBUEhJQ1MlM0QxJTIwJTVDJTBBJTIwJTIwLWUlMjBVTklUWV9USU1FX1NDQUxFJTNEMjAlMjAlNUMlMEElMjAlMjB1bml0eS1lbnYlM0FsYXRlc3QlMEElMEElMjMlMjBSdW4lMjB3aXRoJTIwcGVyc2lzdGVudCUyMGNhY2hlJTIwKGF2b2lkJTIwcmUtZG93bmxvYWRpbmclMjBiaW5hcmllcyklMEFkb2NrZXIlMjBydW4lMjAtcCUyMDgwMDAlM0E4MDAwJTIwJTVDJTBBJTIwJTIwLXYlMjB+JTJGLm1sYWdlbnRzLWNhY2hlJTNBJTJGcm9vdCUyRi5tbGFnZW50cy1jYWNoZSUyMCU1QyUwQSUyMCUyMHVuaXR5LWVudiUzQWxhdGVzdA==",highlighted:`<span class="hljs-comment"># Run with default settings (graphics enabled, 800x600)</span>
docker run -p 8000:8000 unity-env:latest
<span class="hljs-comment"># Run with custom settings</span>
docker run -p 8000:8000 \\
-e UNITY_NO_GRAPHICS=0 \\
-e UNITY_WIDTH=1280 \\
-e UNITY_HEIGHT=720 \\
-e UNITY_TIME_SCALE=1.0 \\
unity-env:latest
<span class="hljs-comment"># Run in headless mode (faster for training)</span>
docker run -p 8000:8000 \\
-e UNITY_NO_GRAPHICS=1 \\
-e UNITY_TIME_SCALE=20 \\
unity-env:latest
<span class="hljs-comment"># Run with persistent cache (avoid re-downloading binaries)</span>
docker run -p 8000:8000 \\
-v ~/.mlagents-cache:/root/.mlagents-cache \\
unity-env:latest`,lang:"bash",wrap:!1}}),L=new m({props:{title:"Install Client Dependencies",local:"install-client-dependencies",headingTag:"h4"}}),F=new w({props:{code:"Y2QlMjBlbnZzJTJGdW5pdHlfZW52JTBBcGlwJTIwaW5zdGFsbCUyMHJlcXVlc3RzJTIwd2Vic29ja2V0cw==",highlighted:`<span class="hljs-built_in">cd</span> envs/unity_env
pip install requests websockets`,lang:"bash",wrap:!1}}),q=new m({props:{title:"Quick Start",local:"quick-start",headingTag:"h2"}}),P=new m({props:{title:"Option 1: Direct Mode (Fastest for Testing)",local:"option-1-direct-mode-fastest-for-testing",headingTag:"h3"}}),K=new w({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyME9wZW5FbnYlMjByZXBvc2l0b3J5JTIwcm9vdCUzQSUwQSUwQSUyMyUyMFJ1biUyMHdpdGglMjBncmFwaGljcyUyMChkZWZhdWx0JTNBJTIwMTI4MHg3MjApJTBBcHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLWRpcmVjdCUwQSUwQSUyMyUyMFJ1biUyMHdpdGglMjBjdXN0b20lMjB3aW5kb3clMjBzaXplJTBBcHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLWRpcmVjdCUyMC0td2lkdGglMjA4MDAlMjAtLWhlaWdodCUyMDYwMCUwQSUwQSUyMyUyMFJ1biUyMGhlYWRsZXNzJTIwKGZhc3RlciUyMGZvciUyMHRyYWluaW5nKSUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS1kaXJlY3QlMjAtLW5vLWdyYXBoaWNzJTIwLS10aW1lLXNjYWxlJTIwMjAlMEElMEElMjMlMjBSdW4lMjAzREJhbGwlMjBlbnZpcm9ubWVudCUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS1kaXJlY3QlMjAtLWVudiUyMDNEQmFsbCUyMC0tZXBpc29kZXMlMjA1",highlighted:`<span class="hljs-comment"># From the OpenEnv repository root:</span>
<span class="hljs-comment"># Run with graphics (default: 1280x720)</span>
python examples/unity_simple.py --direct
<span class="hljs-comment"># Run with custom window size</span>
python examples/unity_simple.py --direct --width 800 --height 600
<span class="hljs-comment"># Run headless (faster for training)</span>
python examples/unity_simple.py --direct --no-graphics --time-scale 20
<span class="hljs-comment"># Run 3DBall environment</span>
python examples/unity_simple.py --direct --<span class="hljs-built_in">env</span> 3DBall --episodes 5`,lang:"bash",wrap:!1}}),ee=new m({props:{title:"Option 2: Server Mode",local:"option-2-server-mode",headingTag:"h3"}}),le=new w({props:{code:"JTIzJTIwVGVybWluYWwlMjAxJTNBJTIwU3RhcnQlMjB0aGUlMjBzZXJ2ZXIlMjAoZ3JhcGhpY3MlMjBlbmFibGVkJTIwYnklMjBkZWZhdWx0KSUwQWNkJTIwZW52cyUyRnVuaXR5X2VudiUwQXV2JTIwcnVuJTIwdXZpY29ybiUyMHNlcnZlci5hcHAlM0FhcHAlMjAtLWhvc3QlMjAwLjAuMC4wJTIwLS1wb3J0JTIwODAwMCUwQSUwQSUyMyUyMFRlcm1pbmFsJTIwMiUzQSUyMFJ1biUyMHRoZSUyMGV4YW1wbGUlMjBjbGllbnQlMjAoZnJvbSUyMHJlcG8lMjByb290KSUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS11cmwlMjBodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS11cmwlMjBodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMC0tZW52JTIwM0RCYWxsJTIwLS1lcGlzb2RlcyUyMDU=",highlighted:`<span class="hljs-comment"># Terminal 1: Start the server (graphics enabled by default)</span>
<span class="hljs-built_in">cd</span> envs/unity_env
uv run uvicorn server.app:app --host 0.0.0.0 --port 8000
<span class="hljs-comment"># Terminal 2: Run the example client (from repo root)</span>
python examples/unity_simple.py --url http://localhost:8000
python examples/unity_simple.py --url http://localhost:8000 --<span class="hljs-built_in">env</span> 3DBall --episodes 5`,lang:"bash",wrap:!1}}),ne=new m({props:{title:"Option 3: Docker Mode",local:"option-3-docker-mode",headingTag:"h3"}}),ie=new w({props:{code:"JTIzJTIwQnVpbGQlMjB0aGUlMjBEb2NrZXIlMjBpbWFnZSUyMGZpcnN0JTBBY2QlMjBlbnZzJTJGdW5pdHlfZW52JTBBZG9ja2VyJTIwYnVpbGQlMjAtZiUyMHNlcnZlciUyRkRvY2tlcmZpbGUlMjAtdCUyMHVuaXR5LWVudiUzQWxhdGVzdCUyMC4lMEElMEElMjMlMjBSdW4lMjBleGFtcGxlcyUyMGZyb20lMjByZXBvJTIwcm9vdCUzQSUwQWNkJTIwLi4lMkYuLiUwQSUwQSUyMyUyMFJ1biUyMHdpdGglMjBkZWZhdWx0JTIwc2V0dGluZ3MlMEFweXRob24lMjBleGFtcGxlcyUyRnVuaXR5X3NpbXBsZS5weSUyMC0tZG9ja2VyJTBBJTBBJTIzJTIwUnVuJTIwd2l0aCUyMGN1c3RvbSUyMHdpbmRvdyUyMHNpemUlMEFweXRob24lMjBleGFtcGxlcyUyRnVuaXR5X3NpbXBsZS5weSUyMC0tZG9ja2VyJTIwLS13aWR0aCUyMDEyODAlMjAtLWhlaWdodCUyMDcyMCUwQSUwQSUyMyUyMFJ1biUyMGhlYWRsZXNzJTIwKGZhc3RlciUyMGZvciUyMHRyYWluaW5nKSUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS1kb2NrZXIlMjAtLW5vLWdyYXBoaWNzJTIwLS10aW1lLXNjYWxlJTIwMjAlMEElMEElMjMlMjBSdW4lMjAzREJhbGwlMjBmb3IlMjAxMCUyMGVwaXNvZGVzJTBBcHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLWRvY2tlciUyMC0tZW52JTIwM0RCYWxsJTIwLS1lcGlzb2RlcyUyMDEwJTBBJTBBJTIzJTIwVXNlJTIwYSUyMGN1c3RvbSUyMERvY2tlciUyMGltYWdlJTBBcHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLWRvY2tlciUyMC0tZG9ja2VyLWltYWdlJTIwbXktdW5pdHktZW52JTNBdjE=",highlighted:`<span class="hljs-comment"># Build the Docker image first</span>
<span class="hljs-built_in">cd</span> envs/unity_env
docker build -f server/Dockerfile -t unity-env:latest .
<span class="hljs-comment"># Run examples from repo root:</span>
<span class="hljs-built_in">cd</span> ../..
<span class="hljs-comment"># Run with default settings</span>
python examples/unity_simple.py --docker
<span class="hljs-comment"># Run with custom window size</span>
python examples/unity_simple.py --docker --width 1280 --height 720
<span class="hljs-comment"># Run headless (faster for training)</span>
python examples/unity_simple.py --docker --no-graphics --time-scale 20
<span class="hljs-comment"># Run 3DBall for 10 episodes</span>
python examples/unity_simple.py --docker --<span class="hljs-built_in">env</span> 3DBall --episodes 10
<span class="hljs-comment"># Use a custom Docker image</span>
python examples/unity_simple.py --docker --docker-image my-unity-env:v1`,lang:"bash",wrap:!1}}),ae=new m({props:{title:"Example Scripts",local:"example-scripts",headingTag:"h2"}}),pe=new m({props:{title:"Basic Usage Examples",local:"basic-usage-examples",headingTag:"h3"}}),Me=new m({props:{title:"1. Direct Mode - Quick Testing",local:"1-direct-mode---quick-testing",headingTag:"h4"}}),oe=new w({props:{code:"JTIzJTIwUnVuJTIwUHVzaEJsb2NrJTIwd2l0aCUyMGdyYXBoaWNzJTIwKGRlZmF1bHQpJTBBcHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLWRpcmVjdCUwQSUwQSUyMyUyME91dHB1dCUzQSUwQSUyMyUyMCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUwQSUyMyUyMFVuaXR5JTIwTUwtQWdlbnRzJTIwRW52aXJvbm1lbnQlMjAtJTIwRGlyZWN0JTIwTW9kZSUwQSUyMyUyMCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUwQSUyMyUyMEVudmlyb25tZW50JTNBJTIwUHVzaEJsb2NrJTBBJTIzJTIwRXBpc29kZXMlM0ElMjAzJTBBJTIzJTIwTWF4JTIwc3RlcHMlM0ElMjA1MDAlMEElMjMlMjBXaW5kb3clMjBzaXplJTNBJTIwMTI4MHg3MjAlMEElMjMlMjBHcmFwaGljcyUzQSUyMEVuYWJsZWQlMEElMjMlMjAuLi4=",highlighted:`<span class="hljs-comment"># Run PushBlock with graphics (default)</span>
python examples/unity_simple.py --direct
<span class="hljs-comment"># Output:</span>
<span class="hljs-comment"># ============================================================</span>
<span class="hljs-comment"># Unity ML-Agents Environment - Direct Mode</span>
<span class="hljs-comment"># ============================================================</span>
<span class="hljs-comment"># Environment: PushBlock</span>
<span class="hljs-comment"># Episodes: 3</span>
<span class="hljs-comment"># Max steps: 500</span>
<span class="hljs-comment"># Window size: 1280x720</span>
<span class="hljs-comment"># Graphics: Enabled</span>
<span class="hljs-comment"># ...</span>`,lang:"bash",wrap:!1}}),re=new m({props:{title:"2. Direct Mode - Training Configuration",local:"2-direct-mode---training-configuration",headingTag:"h4"}}),ce=new w({props:{code:"JTIzJTIwSGVhZGxlc3MlMjBtb2RlJTIwd2l0aCUyMGZhc3QlMjBzaW11bGF0aW9uJTIwKDIweCUyMHNwZWVkKSUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS1kaXJlY3QlMjAtLW5vLWdyYXBoaWNzJTIwLS10aW1lLXNjYWxlJTIwMjAlMjAtLWVwaXNvZGVzJTIwMTAlMjAtLW1heC1zdGVwcyUyMDEwMDAlMEElMEElMjMlMjBUaGlzJTIwaXMlMjBpZGVhbCUyMGZvciUyMHRyYWluaW5nJTIwLSUyMG5vJTIwZ3JhcGhpY3MlMjBvdmVyaGVhZCUyQyUyMGZhc3RlciUyMHNpbXVsYXRpb24=",highlighted:`<span class="hljs-comment"># Headless mode with fast simulation (20x speed)</span>
python examples/unity_simple.py --direct --no-graphics --time-scale 20 --episodes 10 --max-steps 1000
<span class="hljs-comment"># This is ideal for training - no graphics overhead, faster simulation</span>`,lang:"bash",wrap:!1}}),me=new m({props:{title:"3. Direct Mode - 3DBall with Custom Window",local:"3-direct-mode---3dball-with-custom-window",headingTag:"h4"}}),de=new w({props:{code:"JTIzJTIwUnVuJTIwM0RCYWxsJTIwKGNvbnRpbnVvdXMlMjBhY3Rpb25zKSUyMHdpdGglMjBsYXJnZXIlMjB3aW5kb3clMEFweXRob24lMjBleGFtcGxlcyUyRnVuaXR5X3NpbXBsZS5weSUyMC0tZGlyZWN0JTIwLS1lbnYlMjAzREJhbGwlMjAtLXdpZHRoJTIwMTI4MCUyMC0taGVpZ2h0JTIwNzIwJTIwLS1lcGlzb2RlcyUyMDU=",highlighted:`<span class="hljs-comment"># Run 3DBall (continuous actions) with larger window</span>
python examples/unity_simple.py --direct --<span class="hljs-built_in">env</span> 3DBall --width 1280 --height 720 --episodes 5`,lang:"bash",wrap:!1}}),ye=new m({props:{title:"4. Docker Mode - Production-like Testing",local:"4-docker-mode---production-like-testing",headingTag:"h4"}}),Ue=new w({props:{code:"JTIzJTIwQnVpbGQlMjB0aGUlMjBpbWFnZSUyMGZpcnN0JTBBY2QlMjBlbnZzJTJGdW5pdHlfZW52JTBBZG9ja2VyJTIwYnVpbGQlMjAtZiUyMHNlcnZlciUyRkRvY2tlcmZpbGUlMjAtdCUyMHVuaXR5LWVudiUzQWxhdGVzdCUyMC4lMEElMEElMjMlMjBSdW4lMjB2aWElMjBEb2NrZXIlMjB3aXRoJTIwZ3JhcGhpY3MlMEFweXRob24lMjBleGFtcGxlcyUyRnVuaXR5X3NpbXBsZS5weSUyMC0tZG9ja2VyJTIwLS13aWR0aCUyMDEyODAlMjAtLWhlaWdodCUyMDcyMCUwQSUwQSUyMyUyMFJ1biUyMHZpYSUyMERvY2tlciUyMGluJTIwaGVhZGxlc3MlMjBtb2RlJTIwZm9yJTIwdHJhaW5pbmclMEFweXRob24lMjBleGFtcGxlcyUyRnVuaXR5X3NpbXBsZS5weSUyMC0tZG9ja2VyJTIwLS1uby1ncmFwaGljcyUyMC0tdGltZS1zY2FsZSUyMDIwJTIwLS1lcGlzb2RlcyUyMDIw",highlighted:`<span class="hljs-comment"># Build the image first</span>
<span class="hljs-built_in">cd</span> envs/unity_env
docker build -f server/Dockerfile -t unity-env:latest .
<span class="hljs-comment"># Run via Docker with graphics</span>
python examples/unity_simple.py --docker --width 1280 --height 720
<span class="hljs-comment"># Run via Docker in headless mode for training</span>
python examples/unity_simple.py --docker --no-graphics --time-scale 20 --episodes 20`,lang:"bash",wrap:!1}}),we=new m({props:{title:"5. Server Mode - Separate Server and Client",local:"5-server-mode---separate-server-and-client",headingTag:"h4"}}),ue=new w({props:{code:"JTIzJTIwVGVybWluYWwlMjAxJTNBJTIwU3RhcnQlMjBzZXJ2ZXIlMjB3aXRoJTIwc3BlY2lmaWMlMjBzZXR0aW5ncyUwQVVOSVRZX1dJRFRIJTNEMTI4MCUyMFVOSVRZX0hFSUdIVCUzRDcyMCUyMHV2JTIwcnVuJTIwdXZpY29ybiUyMHNlcnZlci5hcHAlM0FhcHAlMjAtLXBvcnQlMjA4MDAwJTBBJTBBJTIzJTIwVGVybWluYWwlMjAyJTNBJTIwQ29ubmVjdCUyMGFuZCUyMHJ1biUyMGVwaXNvZGVzJTBBcHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLXVybCUyMGh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJTIwLS1lbnYlMjBQdXNoQmxvY2slMjAtLWVwaXNvZGVzJTIwNSUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS11cmwlMjBodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMC0tZW52JTIwM0RCYWxsJTIwLS1lcGlzb2RlcyUyMDU=",highlighted:`<span class="hljs-comment"># Terminal 1: Start server with specific settings</span>
UNITY_WIDTH=1280 UNITY_HEIGHT=720 uv run uvicorn server.app:app --port 8000
<span class="hljs-comment"># Terminal 2: Connect and run episodes</span>
python examples/unity_simple.py --url http://localhost:8000 --<span class="hljs-built_in">env</span> PushBlock --episodes 5
python examples/unity_simple.py --url http://localhost:8000 --<span class="hljs-built_in">env</span> 3DBall --episodes 5`,lang:"bash",wrap:!1}}),Te=new m({props:{title:"6. Alternating Environments",local:"6-alternating-environments",headingTag:"h4"}}),he=new w({props:{code:"JTIzJTIwUnVuJTIwYWx0ZXJuYXRpbmclMjBlcGlzb2RlcyUyMGJldHdlZW4lMjBQdXNoQmxvY2slMjBhbmQlMjAzREJhbGwlMEFweXRob24lMjBleGFtcGxlcyUyRnVuaXR5X3NpbXBsZS5weSUyMC0tZGlyZWN0JTIwLS1lbnYlMjBib3RoJTIwLS1lcGlzb2RlcyUyMDYlMEElMjMlMjBFcGlzb2RlcyUyMDElMkMzJTJDNSUyMCUzRCUyMFB1c2hCbG9jayUzQiUyMEVwaXNvZGVzJTIwMiUyQzQlMkM2JTIwJTNEJTIwM0RCYWxs",highlighted:`<span class="hljs-comment"># Run alternating episodes between PushBlock and 3DBall</span>
python examples/unity_simple.py --direct --<span class="hljs-built_in">env</span> both --episodes 6
<span class="hljs-comment"># Episodes 1,3,5 = PushBlock; Episodes 2,4,6 = 3DBall</span>`,lang:"bash",wrap:!1}}),Je=new m({props:{title:"Command Line Options",local:"command-line-options",headingTag:"h3"}}),be=new m({props:{title:"Python Client Usage",local:"python-client-usage",headingTag:"h2"}}),$e=new m({props:{title:"Connect to Server",local:"connect-to-server",headingTag:"h3"}}),fe=new w({props:{code:"ZnJvbSUyMGVudnMudW5pdHlfZW52JTIwaW1wb3J0JTIwVW5pdHlFbnYlMkMlMjBVbml0eUFjdGlvbiUwQSUwQSUyMyUyMENvbm5lY3QlMjB0byUyMHRoZSUyMHNlcnZlciUwQXdpdGglMjBVbml0eUVudihiYXNlX3VybCUzRCUyMmh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJTIyKSUyMGFzJTIwY2xpZW50JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVzZXQlMjB0byUyMFB1c2hCbG9jayUyMGVudmlyb25tZW50JTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwY2xpZW50LnJlc2V0KGVudl9pZCUzRCUyMlB1c2hCbG9jayUyMiklMEElMjAlMjAlMjAlMjBwcmludChmJTIyT2JzZXJ2YXRpb24lMjBkaW1zJTNBJTIwJTdCbGVuKHJlc3VsdC5vYnNlcnZhdGlvbi52ZWN0b3Jfb2JzZXJ2YXRpb25zKSU3RCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBUYWtlJTIwYWN0aW9ucyUwQSUyMCUyMCUyMCUyMGZvciUyMF8lMjBpbiUyMHJhbmdlKDEwMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQdXNoQmxvY2slMjBhY3Rpb25zJTNBJTIwMCUzRG5vb3AlMkMlMjAxJTNEZm9yd2FyZCUyQyUyMDIlM0RiYWNrd2FyZCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMDMlM0Ryb3RhdGVfbGVmdCUyQyUyMDQlM0Ryb3RhdGVfcmlnaHQlMkMlMjA1JTNEc3RyYWZlX2xlZnQlMkMlMjA2JTNEc3RyYWZlX3JpZ2h0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWN0aW9uJTIwJTNEJTIwVW5pdHlBY3Rpb24oZGlzY3JldGVfYWN0aW9ucyUzRCU1QjElNUQpJTIwJTIwJTIzJTIwTW92ZSUyMGZvcndhcmQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBjbGllbnQuc3RlcChhY3Rpb24pJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlJld2FyZCUzQSUyMCU3QnJlc3VsdC5yZXdhcmQlN0QlMkMlMjBEb25lJTNBJTIwJTdCcmVzdWx0LmRvbmUlN0QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjByZXN1bHQuZG9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGNsaWVudC5yZXNldCgp",highlighted:`<span class="hljs-keyword">from</span> envs.unity_env <span class="hljs-keyword">import</span> UnityEnv, UnityAction
<span class="hljs-comment"># Connect to the server</span>
<span class="hljs-keyword">with</span> UnityEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>) <span class="hljs-keyword">as</span> client:
<span class="hljs-comment"># Reset to PushBlock environment</span>
result = client.reset(env_id=<span class="hljs-string">&quot;PushBlock&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Observation dims: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(result.observation.vector_observations)}</span>&quot;</span>)
<span class="hljs-comment"># Take actions</span>
<span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">100</span>):
<span class="hljs-comment"># PushBlock actions: 0=noop, 1=forward, 2=backward,</span>
<span class="hljs-comment"># 3=rotate_left, 4=rotate_right, 5=strafe_left, 6=strafe_right</span>
action = UnityAction(discrete_actions=[<span class="hljs-number">1</span>]) <span class="hljs-comment"># Move forward</span>
result = client.step(action)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Reward: <span class="hljs-subst">{result.reward}</span>, Done: <span class="hljs-subst">{result.done}</span>&quot;</span>)
<span class="hljs-keyword">if</span> result.done:
result = client.reset()`,lang:"python",wrap:!1}}),Ce=new m({props:{title:"Connect via Docker",local:"connect-via-docker",headingTag:"h3"}}),ge=new w({props:{code:"ZnJvbSUyMGVudnMudW5pdHlfZW52JTIwaW1wb3J0JTIwVW5pdHlFbnYlMkMlMjBVbml0eUFjdGlvbiUwQSUwQSUyMyUyMEF1dG9tYXRpY2FsbHklMjBzdGFydCUyMERvY2tlciUyMGNvbnRhaW5lciUyMGFuZCUyMGNvbm5lY3QlMEFjbGllbnQlMjAlM0QlMjBVbml0eUVudi5mcm9tX2RvY2tlcl9pbWFnZSglMEElMjAlMjAlMjAlMjAlMjJ1bml0eS1lbnYlM0FsYXRlc3QlMjIlMkMlMEElMjAlMjAlMjAlMjBlbnZpcm9ubWVudCUzRCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMlVOSVRZX05PX0dSQVBISUNTJTIyJTNBJTIwJTIyMCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMlVOSVRZX1dJRFRIJTIyJTNBJTIwJTIyMTI4MCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMlVOSVRZX0hFSUdIVCUyMiUzQSUyMCUyMjcyMCUyMiUyQyUwQSUyMCUyMCUyMCUyMCU3RCUwQSklMEElMEF0cnklM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBjbGllbnQucmVzZXQoZW52X2lkJTNEJTIyUHVzaEJsb2NrJTIyKSUwQSUyMCUyMCUyMCUyMGZvciUyMF8lMjBpbiUyMHJhbmdlKDEwMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY3Rpb24lMjAlM0QlMjBVbml0eUFjdGlvbihkaXNjcmV0ZV9hY3Rpb25zJTNEJTVCMSU1RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBjbGllbnQuc3RlcChhY3Rpb24pJTBBZmluYWxseSUzQSUwQSUyMCUyMCUyMCUyMGNsaWVudC5jbG9zZSgp",highlighted:`<span class="hljs-keyword">from</span> envs.unity_env <span class="hljs-keyword">import</span> UnityEnv, UnityAction
<span class="hljs-comment"># Automatically start Docker container and connect</span>
client = UnityEnv.from_docker_image(
<span class="hljs-string">&quot;unity-env:latest&quot;</span>,
environment={
<span class="hljs-string">&quot;UNITY_NO_GRAPHICS&quot;</span>: <span class="hljs-string">&quot;0&quot;</span>,
<span class="hljs-string">&quot;UNITY_WIDTH&quot;</span>: <span class="hljs-string">&quot;1280&quot;</span>,
<span class="hljs-string">&quot;UNITY_HEIGHT&quot;</span>: <span class="hljs-string">&quot;720&quot;</span>,
}
)
<span class="hljs-keyword">try</span>:
result = client.reset(env_id=<span class="hljs-string">&quot;PushBlock&quot;</span>)
<span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">100</span>):
action = UnityAction(discrete_actions=[<span class="hljs-number">1</span>])
result = client.step(action)
<span class="hljs-keyword">finally</span>:
client.close()`,lang:"python",wrap:!1}}),Ie=new m({props:{title:"Switch Environments Dynamically",local:"switch-environments-dynamically",headingTag:"h3"}}),ve=new w({props:{code:"JTIzJTIwU3RhcnQlMjB3aXRoJTIwUHVzaEJsb2NrJTBBcmVzdWx0JTIwJTNEJTIwY2xpZW50LnJlc2V0KGVudl9pZCUzRCUyMlB1c2hCbG9jayUyMiklMEElMjMlMjAuLi4lMjB0cmFpbiUyMG9uJTIwUHVzaEJsb2NrJTIwLi4uJTBBJTBBJTIzJTIwU3dpdGNoJTIwdG8lMjAzREJhbGwlMjAoY29udGludW91cyUyMGFjdGlvbnMpJTBBcmVzdWx0JTIwJTNEJTIwY2xpZW50LnJlc2V0KGVudl9pZCUzRCUyMjNEQmFsbCUyMiklMEFhY3Rpb24lMjAlM0QlMjBVbml0eUFjdGlvbihjb250aW51b3VzX2FjdGlvbnMlM0QlNUIwLjUlMkMlMjAtMC4zJTVEKSUwQXJlc3VsdCUyMCUzRCUyMGNsaWVudC5zdGVwKGFjdGlvbik=",highlighted:`<span class="hljs-comment"># Start with PushBlock</span>
result = client.reset(env_id=<span class="hljs-string">&quot;PushBlock&quot;</span>)
<span class="hljs-comment"># ... train on PushBlock ...</span>
<span class="hljs-comment"># Switch to 3DBall (continuous actions)</span>
result = client.reset(env_id=<span class="hljs-string">&quot;3DBall&quot;</span>)
action = UnityAction(continuous_actions=[<span class="hljs-number">0.5</span>, -<span class="hljs-number">0.3</span>])
result = client.step(action)`,lang:"python",wrap:!1}}),Be=new m({props:{title:"Direct Mode (Embedded Server)",local:"direct-mode-embedded-server",headingTag:"h3"}}),Ge=new w({props:{code:"ZnJvbSUyMGVudnMudW5pdHlfZW52LmNsaWVudCUyMGltcG9ydCUyMFVuaXR5RW52JTBBZnJvbSUyMGVudnMudW5pdHlfZW52Lm1vZGVscyUyMGltcG9ydCUyMFVuaXR5QWN0aW9uJTBBJTBBJTIzJTIwQ3JlYXRlJTIwY2xpZW50JTIwd2l0aCUyMGVtYmVkZGVkJTIwbG9jYWwlMjBzZXJ2ZXIlMjAobm8lMjBzZXBhcmF0ZSUyMHNlcnZlciUyMG5lZWRlZCklMEFjbGllbnQlMjAlM0QlMjBVbml0eUVudi5mcm9tX2RpcmVjdCglMEElMjAlMjAlMjAlMjBlbnZfaWQlM0QlMjJQdXNoQmxvY2slMjIlMkMlMEElMjAlMjAlMjAlMjBub19ncmFwaGljcyUzREZhbHNlJTJDJTIwJTIwJTIzJTIwU2hvdyUyMGdyYXBoaWNzJTIwd2luZG93JTBBJTIwJTIwJTIwJTIwd2lkdGglM0QxMjgwJTJDJTBBJTIwJTIwJTIwJTIwaGVpZ2h0JTNENzIwJTJDJTBBJTIwJTIwJTIwJTIwdGltZV9zY2FsZSUzRDEuMCUyQyUwQSklMEElMEF0cnklM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBjbGllbnQucmVzZXQoKSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJPYnNlcnZhdGlvbiUzQSUyMCU3QmxlbihyZXN1bHQub2JzZXJ2YXRpb24udmVjdG9yX29ic2VydmF0aW9ucyklN0QlMjBkaW1lbnNpb25zJTIyKSUwQSUwQSUyMCUyMCUyMCUyMGZvciUyMHN0ZXAlMjBpbiUyMHJhbmdlKDEwMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY3Rpb24lMjAlM0QlMjBVbml0eUFjdGlvbihkaXNjcmV0ZV9hY3Rpb25zJTNEJTVCMSU1RCklMjAlMjAlMjMlMjBNb3ZlJTIwZm9yd2FyZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGNsaWVudC5zdGVwKGFjdGlvbiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyU3RlcCUyMCU3QnN0ZXAlN0QlM0ElMjByZXdhcmQlM0QlN0JyZXN1bHQucmV3YXJkJTdEJTJDJTIwZG9uZSUzRCU3QnJlc3VsdC5kb25lJTdEJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwcmVzdWx0LmRvbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBjbGllbnQucmVzZXQoKSUwQWZpbmFsbHklM0ElMEElMjAlMjAlMjAlMjBjbGllbnQuY2xvc2UoKQ==",highlighted:`<span class="hljs-keyword">from</span> envs.unity_env.client <span class="hljs-keyword">import</span> UnityEnv
<span class="hljs-keyword">from</span> envs.unity_env.models <span class="hljs-keyword">import</span> UnityAction
<span class="hljs-comment"># Create client with embedded local server (no separate server needed)</span>
client = UnityEnv.from_direct(
env_id=<span class="hljs-string">&quot;PushBlock&quot;</span>,
no_graphics=<span class="hljs-literal">False</span>, <span class="hljs-comment"># Show graphics window</span>
width=<span class="hljs-number">1280</span>,
height=<span class="hljs-number">720</span>,
time_scale=<span class="hljs-number">1.0</span>,
)
<span class="hljs-keyword">try</span>:
result = client.reset()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Observation: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(result.observation.vector_observations)}</span> dimensions&quot;</span>)
<span class="hljs-keyword">for</span> step <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">100</span>):
action = UnityAction(discrete_actions=[<span class="hljs-number">1</span>]) <span class="hljs-comment"># Move forward</span>
result = client.step(action)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Step <span class="hljs-subst">{step}</span>: reward=<span class="hljs-subst">{result.reward}</span>, done=<span class="hljs-subst">{result.done}</span>&quot;</span>)
<span class="hljs-keyword">if</span> result.done:
result = client.reset()
<span class="hljs-keyword">finally</span>:
client.close()`,lang:"python",wrap:!1}}),Re=new m({props:{title:"Action Spaces",local:"action-spaces",headingTag:"h2"}}),We=new m({props:{title:"PushBlock (Discrete)",local:"pushblock-discrete",headingTag:"h3"}}),ze=new w({props:{code:"YWN0aW9uJTIwJTNEJTIwVW5pdHlBY3Rpb24oZGlzY3JldGVfYWN0aW9ucyUzRCU1QjElNUQpJTIwJTIwJTIzJTIwTW92ZSUyMGZvcndhcmQ=",highlighted:'action = UnityAction(discrete_actions=[<span class="hljs-number">1</span>]) <span class="hljs-comment"># Move forward</span>',lang:"python",wrap:!1}}),Ve=new m({props:{title:"3DBall (Continuous)",local:"3dball-continuous",headingTag:"h3"}}),Se=new w({props:{code:"YWN0aW9uJTIwJTNEJTIwVW5pdHlBY3Rpb24oY29udGludW91c19hY3Rpb25zJTNEJTVCMC41JTJDJTIwLTAuMyU1RCk=",highlighted:'action = UnityAction(continuous_actions=[<span class="hljs-number">0.5</span>, -<span class="hljs-number">0.3</span>])',lang:"python",wrap:!1}}),Ne=new m({props:{title:"Observations",local:"observations",headingTag:"h2"}}),Xe=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwY2xpZW50LnJlc2V0KCklMEFvYnMlMjAlM0QlMjByZXN1bHQub2JzZXJ2YXRpb24lMEElMEElMjMlMjBBY2Nlc3MlMjBvYnNlcnZhdGlvbnMlMEFwcmludChmJTIyVmVjdG9yJTIwb2JzJTNBJTIwJTdCb2JzLnZlY3Rvcl9vYnNlcnZhdGlvbnMlN0QlMjIpJTBBcHJpbnQoZiUyMkJlaGF2aW9yJTNBJTIwJTdCb2JzLmJlaGF2aW9yX25hbWUlN0QlMjIpJTBBcHJpbnQoZiUyMkFjdGlvbiUyMHNwZWMlM0ElMjAlN0JvYnMuYWN0aW9uX3NwZWNfaW5mbyU3RCUyMik=",highlighted:`result = client.reset()
obs = result.observation
<span class="hljs-comment"># Access observations</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Vector obs: <span class="hljs-subst">{obs.vector_observations}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Behavior: <span class="hljs-subst">{obs.behavior_name}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Action spec: <span class="hljs-subst">{obs.action_spec_info}</span>&quot;</span>)`,lang:"python",wrap:!1}}),He=new m({props:{title:"Visual Observations (Optional)",local:"visual-observations-optional",headingTag:"h3"}}),_e=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwY2xpZW50LnJlc2V0KGluY2x1ZGVfdmlzdWFsJTNEVHJ1ZSklMEFpZiUyMHJlc3VsdC5vYnNlcnZhdGlvbi52aXN1YWxfb2JzZXJ2YXRpb25zJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQmFzZTY0LWVuY29kZWQlMjBQTkclMjBpbWFnZXMlMEElMjAlMjAlMjAlMjBmb3IlMjBpbWdfYjY0JTIwaW4lMjByZXN1bHQub2JzZXJ2YXRpb24udmlzdWFsX29ic2VydmF0aW9ucyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMERlY29kZSUyMGFuZCUyMHVzZSUyMHRoZSUyMGltYWdlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1wb3J0JTIwYmFzZTY0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1nX2J5dGVzJTIwJTNEJTIwYmFzZTY0LmI2NGRlY29kZShpbWdfYjY0KQ==",highlighted:`result = client.reset(include_visual=<span class="hljs-literal">True</span>)
<span class="hljs-keyword">if</span> result.observation.visual_observations:
<span class="hljs-comment"># Base64-encoded PNG images</span>
<span class="hljs-keyword">for</span> img_b64 <span class="hljs-keyword">in</span> result.observation.visual_observations:
<span class="hljs-comment"># Decode and use the image</span>
<span class="hljs-keyword">import</span> base64
img_bytes = base64.b64decode(img_b64)`,lang:"python",wrap:!1}}),Le=new m({props:{title:"Configuration",local:"configuration",headingTag:"h2"}}),De=new m({props:{title:"Direct Mode Arguments",local:"direct-mode-arguments",headingTag:"h3"}}),qe=new w({props:{code:"ZnJvbSUyMGVudnMudW5pdHlfZW52LmNsaWVudCUyMGltcG9ydCUyMFVuaXR5RW52JTBBJTBBY2xpZW50JTIwJTNEJTIwVW5pdHlFbnYuZnJvbV9kaXJlY3QoJTBBJTIwJTIwJTIwJTIwZW52X2lkJTNEJTIyUHVzaEJsb2NrJTIyJTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVW5pdHklMjBlbnZpcm9ubWVudCUyMHRvJTIwbG9hZCUwQSUyMCUyMCUyMCUyMG5vX2dyYXBoaWNzJTNERmFsc2UlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBGYWxzZSUyMCUzRCUyMHNob3clMjBncmFwaGljcyUyMHdpbmRvdyUwQSUyMCUyMCUyMCUyMHdpZHRoJTNEMTI4MCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFdpbmRvdyUyMHdpZHRoJTIwaW4lMjBwaXhlbHMlMEElMjAlMjAlMjAlMjBoZWlnaHQlM0Q3MjAlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBXaW5kb3clMjBoZWlnaHQlMjBpbiUyMHBpeGVscyUwQSUyMCUyMCUyMCUyMHRpbWVfc2NhbGUlM0QxLjAlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTaW11bGF0aW9uJTIwc3BlZWQlMjAoMjAuMCUyMGZvciUyMGZhc3QlMjB0cmFpbmluZyklMEElMjAlMjAlMjAlMjBxdWFsaXR5X2xldmVsJTNENSUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEdyYXBoaWNzJTIwcXVhbGl0eSUyMDAtNSUwQSUyMCUyMCUyMCUyMHBvcnQlM0Q4NzY1JTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUG9ydCUyMGZvciUyMGVtYmVkZGVkJTIwc2VydmVyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> envs.unity_env.client <span class="hljs-keyword">import</span> UnityEnv
client = UnityEnv.from_direct(
env_id=<span class="hljs-string">&quot;PushBlock&quot;</span>, <span class="hljs-comment"># Unity environment to load</span>
no_graphics=<span class="hljs-literal">False</span>, <span class="hljs-comment"># False = show graphics window</span>
width=<span class="hljs-number">1280</span>, <span class="hljs-comment"># Window width in pixels</span>
height=<span class="hljs-number">720</span>, <span class="hljs-comment"># Window height in pixels</span>
time_scale=<span class="hljs-number">1.0</span>, <span class="hljs-comment"># Simulation speed (20.0 for fast training)</span>
quality_level=<span class="hljs-number">5</span>, <span class="hljs-comment"># Graphics quality 0-5</span>
port=<span class="hljs-number">8765</span>, <span class="hljs-comment"># Port for embedded server</span>
)`,lang:"python",wrap:!1}}),Pe=new m({props:{title:"Environment Variables",local:"environment-variables",headingTag:"h3"}}),et=new m({props:{title:"Environment State",local:"environment-state",headingTag:"h2"}}),lt=new w({props:{code:"c3RhdGUlMjAlM0QlMjBjbGllbnQuc3RhdGUoKSUwQXByaW50KGYlMjJFbnZpcm9ubWVudCUzQSUyMCU3QnN0YXRlLmVudl9pZCU3RCUyMiklMEFwcmludChmJTIyRXBpc29kZSUyMElEJTNBJTIwJTdCc3RhdGUuZXBpc29kZV9pZCU3RCUyMiklMEFwcmludChmJTIyU3RlcCUyMGNvdW50JTNBJTIwJTdCc3RhdGUuc3RlcF9jb3VudCU3RCUyMiklMEFwcmludChmJTIyQXZhaWxhYmxlJTIwZW52cyUzQSUyMCU3QnN0YXRlLmF2YWlsYWJsZV9lbnZzJTdEJTIyKSUwQXByaW50KGYlMjJBY3Rpb24lMjBzcGVjJTNBJTIwJTdCc3RhdGUuYWN0aW9uX3NwZWMlN0QlMjIpJTBBcHJpbnQoZiUyMk9ic2VydmF0aW9uJTIwc3BlYyUzQSUyMCU3QnN0YXRlLm9ic2VydmF0aW9uX3NwZWMlN0QlMjIp",highlighted:`state = client.state()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Environment: <span class="hljs-subst">{state.env_id}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Episode ID: <span class="hljs-subst">{state.episode_id}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Step count: <span class="hljs-subst">{state.step_count}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Available envs: <span class="hljs-subst">{state.available_envs}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Action spec: <span class="hljs-subst">{state.action_spec}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Observation spec: <span class="hljs-subst">{state.observation_spec}</span>&quot;</span>)`,lang:"python",wrap:!1}}),nt=new m({props:{title:"Troubleshooting",local:"troubleshooting",headingTag:"h2"}}),st=new m({props:{title:"Docker Mode Fails on Apple Silicon (M1/M2/M3/M4)",local:"docker-mode-fails-on-apple-silicon-m1m2m3m4",headingTag:"h3"}}),at=new w({props:{code:"RXJyb3IlMjBydW5uaW5nJTIwd2l0aCUyMERvY2tlciUzQSUyMFNlcnZlciUyMGVycm9yJTNBJTIwVGhlJTIwVW5pdHklMjBlbnZpcm9ubWVudCUyMHRvb2slMjB0b28lMjBsb25nJTIwdG8lMjByZXNwb25kLi4u",highlighted:'<span class="hljs-keyword">Error </span>running with Docker: Server error: The Unity environment took too long to respond...',lang:"",wrap:!1}}),Mt=new w({props:{code:"KiUyMEFzc2VydGlvbiUzQSUyMHNob3VsZCUyMG5vdCUyMGJlJTIwcmVhY2hlZCUyMGF0JTIwdHJhbXAtYW1kNjQuYyUzQTYwNSUwQUVudmlyb25tZW50JTIwc2h1dCUyMGRvd24lMjB3aXRoJTIwcmV0dXJuJTIwY29kZSUyMC02JTIwKFNJR0FCUlQp",highlighted:`* Assertion: <span class="hljs-keyword">should </span>not <span class="hljs-keyword">be </span>reached <span class="hljs-built_in">at</span> tramp-amd64.c:<span class="hljs-number">605</span>
Environment <span class="hljs-keyword">shut </span>down with return code -<span class="hljs-number">6</span> (SIGABRT)`,lang:"",wrap:!1}}),ct=new w({props:{code:"cHl0aG9uJTIwZXhhbXBsZXMlMkZ1bml0eV9zaW1wbGUucHklMjAtLWRpcmVjdCUyMC0tbm8tZ3JhcGhpY3M=",highlighted:"python examples/unity_simple.py --direct --no-graphics",lang:"bash",wrap:!1}}),dt=new w({props:{code:"JTIzJTIwVGVybWluYWwlMjAxJTNBJTIwU3RhcnQlMjBzZXJ2ZXIlMjAodXNlcyUyMG5hdGl2ZSUyMG1hY09TJTIwYmluYXJpZXMpJTBBdXZpY29ybiUyMHNlcnZlci5hcHAlM0FhcHAlMjAtLWhvc3QlMjAwLjAuMC4wJTIwLS1wb3J0JTIwODAwMCUwQSUwQSUyMyUyMFRlcm1pbmFsJTIwMiUzQSUyMFJ1biUyMGNsaWVudCUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGdW5pdHlfc2ltcGxlLnB5JTIwLS11cmwlMjBodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMA==",highlighted:`<span class="hljs-comment"># Terminal 1: Start server (uses native macOS binaries)</span>
uvicorn server.app:app --host 0.0.0.0 --port 8000
<span class="hljs-comment"># Terminal 2: Run client</span>
python examples/unity_simple.py --url http://localhost:8000`,lang:"bash",wrap:!1}}),yt=new m({props:{title:"First Run is Slow",local:"first-run-is-slow",headingTag:"h3"}}),wt=new m({props:{title:"Graphics Not Showing",local:"graphics-not-showing",headingTag:"h3"}}),Tt=new m({props:{title:"Docker Container Fails to Start",local:"docker-container-fails-to-start",headingTag:"h3"}}),ht=new w({props:{code:"JTIzJTIwQ2hlY2slMjBEb2NrZXIlMjBsb2dzJTBBZG9ja2VyJTIwbG9ncyUyMCUzQ2NvbnRhaW5lcl9pZCUzRSUwQSUwQSUyMyUyMEVuc3VyZSUyMHRoZSUyMGltYWdlJTIwaXMlMjBidWlsdCUwQWRvY2tlciUyMGltYWdlcyUyMCU3QyUyMGdyZXAlMjB1bml0eS1lbnYlMEElMEElMjMlMjBSZWJ1aWxkJTIwaWYlMjBuZWNlc3NhcnklMEFjZCUyMGVudnMlMkZ1bml0eV9lbnYlMEFkb2NrZXIlMjBidWlsZCUyMC1mJTIwc2VydmVyJTJGRG9ja2VyZmlsZSUyMC10JTIwdW5pdHktZW52JTNBbGF0ZXN0JTIwLg==",highlighted:`<span class="hljs-comment"># Check Docker logs</span>
docker logs &lt;container_id&gt;
<span class="hljs-comment"># Ensure the image is built</span>
docker images | grep unity-env
<span class="hljs-comment"># Rebuild if necessary</span>
<span class="hljs-built_in">cd</span> envs/unity_env
docker build -f server/Dockerfile -t unity-env:latest .`,lang:"bash",wrap:!1}}),Jt=new m({props:{title:"Import Errors",local:"import-errors",headingTag:"h3"}}),jt=new w({props:{code:"JTIzJTIwRW5zdXJlJTIweW91J3JlJTIwaW4lMjB0aGUlMjBjb3JyZWN0JTIwZGlyZWN0b3J5JTBBY2QlMjBlbnZzJTJGdW5pdHlfZW52JTBBJTBBJTIzJTIwSW5zdGFsbCUyMGRlcGVuZGVuY2llcyUwQXV2JTIwc3luYyUwQSUyMyUyMG9yJTBBcGlwJTIwaW5zdGFsbCUyMC1lJTIwLg==",highlighted:`<span class="hljs-comment"># Ensure you&#x27;re in the correct directory</span>
<span class="hljs-built_in">cd</span> envs/unity_env
<span class="hljs-comment"># Install dependencies</span>
uv <span class="hljs-built_in">sync</span>
<span class="hljs-comment"># or</span>
pip install -e .`,lang:"bash",wrap:!1}}),bt=new m({props:{title:"mlagents-envs Installation Issues",local:"mlagents-envs-installation-issues",headingTag:"h3"}}),ft=new w({props:{code:"JTIzJTIwQ2xvbmUlMjB0aGUlMjBtbC1hZ2VudHMlMjByZXBvc2l0b3J5JTBBZ2l0JTIwY2xvbmUlMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZVbml0eS1UZWNobm9sb2dpZXMlMkZtbC1hZ2VudHMuZ2l0JTBBY2QlMjBtbC1hZ2VudHMlMEElMEElMjMlMjBJbnN0YWxsJTIwbWxhZ2VudHMtZW52cyUyMGZyb20lMjBzb3VyY2UlMEFwaXAlMjBpbnN0YWxsJTIwLWUlMjAuJTJGbWwtYWdlbnRzLWVudnMlMEElMEElMjMlMjBJbnN0YWxsJTIwdGhlJTIwZnVsbCUyMG1sLWFnZW50cyUyMHBhY2thZ2UlMEFwaXAlMjBpbnN0YWxsJTIwLWUlMjAuJTJGbWwtYWdlbnRz",highlighted:`<span class="hljs-comment"># Clone the ml-agents repository</span>
git <span class="hljs-built_in">clone</span> https://github.com/Unity-Technologies/ml-agents.git
<span class="hljs-built_in">cd</span> ml-agents
<span class="hljs-comment"># Install mlagents-envs from source</span>
pip install -e ./ml-agents-envs
<span class="hljs-comment"># Install the full ml-agents package</span>
pip install -e ./ml-agents`,lang:"bash",wrap:!1}}),It=new m({props:{title:"Caveats",local:"caveats",headingTag:"h2"}}),Bt=new m({props:{title:"Dependencies",local:"dependencies",headingTag:"h2"}}),Rt=new m({props:{title:"References",local:"references",headingTag:"h2"}}),Zt=new ii({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/unity.md"}}),{c(){h=d("meta"),Xt=s(),Nt=d("p"),Ht=s(),a(b.$$.fragment),xt=s(),a($.$$.fragment),_t=s(),f=d("p"),f.innerHTML=ms,Lt=s(),j=d("div"),j.innerHTML=ds,Dt=s(),a(C.$$.fragment),Ft=s(),g=d("table"),g.innerHTML=ys,qt=s(),I=d("p"),I.textContent=Us,Pt=s(),a(v.$$.fragment),Ot=s(),a(B.$$.fragment),Kt=s(),a(G.$$.fragment),el=s(),R=d("ul"),R.innerHTML=ws,tl=s(),a(W.$$.fragment),ll=s(),a(Z.$$.fragment),nl=s(),a(k.$$.fragment),sl=s(),a(z.$$.fragment),il=s(),a(V.$$.fragment),al=s(),a(E.$$.fragment),pl=s(),A=d("p"),A.innerHTML=us,Ml=s(),a(S.$$.fragment),ol=s(),a(N.$$.fragment),rl=s(),Q=d("ul"),Q.innerHTML=Ts,cl=s(),a(Y.$$.fragment),ml=s(),a(X.$$.fragment),dl=s(),H=d("p"),H.innerHTML=hs,yl=s(),a(x.$$.fragment),Ul=s(),a(_.$$.fragment),wl=s(),a(L.$$.fragment),ul=s(),D=d("p"),D.textContent=Js,Tl=s(),a(F.$$.fragment),hl=s(),a(q.$$.fragment),Jl=s(),a(P.$$.fragment),jl=s(),O=d("p"),O.textContent=js,bl=s(),a(K.$$.fragment),$l=s(),a(ee.$$.fragment),fl=s(),te=d("p"),te.textContent=bs,Cl=s(),a(le.$$.fragment),gl=s(),a(ne.$$.fragment),Il=s(),se=d("p"),se.textContent=$s,vl=s(),a(ie.$$.fragment),Bl=s(),a(ae.$$.fragment),Gl=s(),a(pe.$$.fragment),Rl=s(),a(Me.$$.fragment),Wl=s(),a(oe.$$.fragment),Zl=s(),a(re.$$.fragment),kl=s(),a(ce.$$.fragment),zl=s(),a(me.$$.fragment),Vl=s(),a(de.$$.fragment),El=s(),a(ye.$$.fragment),Al=s(),a(Ue.$$.fragment),Sl=s(),a(we.$$.fragment),Nl=s(),a(ue.$$.fragment),Ql=s(),a(Te.$$.fragment),Yl=s(),a(he.$$.fragment),Xl=s(),a(Je.$$.fragment),Hl=s(),je=d("table"),je.innerHTML=fs,xl=s(),a(be.$$.fragment),_l=s(),a($e.$$.fragment),Ll=s(),a(fe.$$.fragment),Dl=s(),a(Ce.$$.fragment),Fl=s(),a(ge.$$.fragment),ql=s(),a(Ie.$$.fragment),Pl=s(),a(ve.$$.fragment),Ol=s(),a(Be.$$.fragment),Kl=s(),a(Ge.$$.fragment),en=s(),a(Re.$$.fragment),tn=s(),a(We.$$.fragment),ln=s(),Ze=d("p"),Ze.textContent=Cs,nn=s(),ke=d("ul"),ke.innerHTML=gs,sn=s(),a(ze.$$.fragment),an=s(),a(Ve.$$.fragment),pn=s(),Ee=d("p"),Ee.textContent=Is,Mn=s(),Ae=d("ul"),Ae.innerHTML=vs,on=s(),a(Se.$$.fragment),rn=s(),a(Ne.$$.fragment),cn=s(),Qe=d("p"),Qe.textContent=Bs,mn=s(),Ye=d("ul"),Ye.innerHTML=Gs,dn=s(),a(Xe.$$.fragment),yn=s(),a(He.$$.fragment),Un=s(),xe=d("p"),xe.innerHTML=Rs,wn=s(),a(_e.$$.fragment),un=s(),a(Le.$$.fragment),Tn=s(),a(De.$$.fragment),hn=s(),Fe=d("p"),Fe.innerHTML=Ws,Jn=s(),a(qe.$$.fragment),jn=s(),a(Pe.$$.fragment),bn=s(),Oe=d("p"),Oe.textContent=Zs,$n=s(),Ke=d("table"),Ke.innerHTML=ks,fn=s(),a(et.$$.fragment),Cn=s(),tt=d("p"),tt.textContent=zs,gn=s(),a(lt.$$.fragment),In=s(),a(nt.$$.fragment),vn=s(),a(st.$$.fragment),Bn=s(),it=d("p"),it.innerHTML=Vs,Gn=s(),a(at.$$.fragment),Rn=s(),pt=d("p"),pt.textContent=Es,Wn=s(),a(Mt.$$.fragment),Zn=s(),ot=d("p"),ot.innerHTML=As,kn=s(),rt=d("p"),rt.innerHTML=Ss,zn=s(),T=d("ol"),J=d("li"),kt=d("p"),kt.innerHTML=Ns,is=s(),a(ct.$$.fragment),as=s(),zt=d("p"),zt.textContent=Qs,ps=s(),mt=d("li"),Vt=d("p"),Vt.innerHTML=Ys,Ms=s(),a(dt.$$.fragment),os=s(),Et=d("li"),Et.innerHTML=Xs,Vn=s(),a(yt.$$.fragment),En=s(),Ut=d("p"),Ut.innerHTML=Hs,An=s(),a(wt.$$.fragment),Sn=s(),ut=d("ul"),ut.innerHTML=xs,Nn=s(),a(Tt.$$.fragment),Qn=s(),a(ht.$$.fragment),Yn=s(),a(Jt.$$.fragment),Xn=s(),a(jt.$$.fragment),Hn=s(),a(bt.$$.fragment),xn=s(),$t=d("p"),$t.innerHTML=_s,_n=s(),a(ft.$$.fragment),Ln=s(),Ct=d("p"),Ct.textContent=Ls,Dn=s(),gt=d("ul"),gt.innerHTML=Ds,Fn=s(),a(It.$$.fragment),qn=s(),vt=d("ol"),vt.innerHTML=Fs,Pn=s(),a(Bt.$$.fragment),On=s(),Gt=d("ul"),Gt.innerHTML=qs,Kn=s(),a(Rt.$$.fragment),es=s(),Wt=d("ul"),Wt.innerHTML=Ps,ts=s(),a(Zt.$$.fragment),ls=s(),Qt=d("p"),this.h()},l(e){const t=ni("svelte-u9bgzb",document.head);h=y(t,"META",{name:!0,content:!0}),t.forEach(l),Xt=i(e),Nt=y(e,"P",{}),Yt(Nt).forEach(l),Ht=i(e),p(b.$$.fragment,e),xt=i(e),p($.$$.fragment,e),_t=i(e),f=y(e,"P",{"data-svelte-h":!0}),U(f)!=="svelte-1a2jmva"&&(f.innerHTML=ms),Lt=i(e),j=y(e,"DIV",{align:!0,"data-svelte-h":!0}),U(j)!=="svelte-126dr9p"&&(j.innerHTML=ds),Dt=i(e),p(C.$$.fragment,e),Ft=i(e),g=y(e,"TABLE",{"data-svelte-h":!0}),U(g)!=="svelte-5umhts"&&(g.innerHTML=ys),qt=i(e),I=y(e,"P",{"data-svelte-h":!0}),U(I)!=="svelte-83f6xb"&&(I.textContent=Us),Pt=i(e),p(v.$$.fragment,e),Ot=i(e),p(B.$$.fragment,e),Kt=i(e),p(G.$$.fragment,e),el=i(e),R=y(e,"UL",{"data-svelte-h":!0}),U(R)!=="svelte-72coh8"&&(R.innerHTML=ws),tl=i(e),p(W.$$.fragment,e),ll=i(e),p(Z.$$.fragment,e),nl=i(e),p(k.$$.fragment,e),sl=i(e),p(z.$$.fragment,e),il=i(e),p(V.$$.fragment,e),al=i(e),p(E.$$.fragment,e),pl=i(e),A=y(e,"P",{"data-svelte-h":!0}),U(A)!=="svelte-1jsm587"&&(A.innerHTML=us),Ml=i(e),p(S.$$.fragment,e),ol=i(e),p(N.$$.fragment,e),rl=i(e),Q=y(e,"UL",{"data-svelte-h":!0}),U(Q)!=="svelte-4dz4ha"&&(Q.innerHTML=Ts),cl=i(e),p(Y.$$.fragment,e),ml=i(e),p(X.$$.fragment,e),dl=i(e),H=y(e,"P",{"data-svelte-h":!0}),U(H)!=="svelte-y60yn9"&&(H.innerHTML=hs),yl=i(e),p(x.$$.fragment,e),Ul=i(e),p(_.$$.fragment,e),wl=i(e),p(L.$$.fragment,e),ul=i(e),D=y(e,"P",{"data-svelte-h":!0}),U(D)!=="svelte-n88x2y"&&(D.textContent=Js),Tl=i(e),p(F.$$.fragment,e),hl=i(e),p(q.$$.fragment,e),Jl=i(e),p(P.$$.fragment,e),jl=i(e),O=y(e,"P",{"data-svelte-h":!0}),U(O)!=="svelte-1xxduf4"&&(O.textContent=js),bl=i(e),p(K.$$.fragment,e),$l=i(e),p(ee.$$.fragment,e),fl=i(e),te=y(e,"P",{"data-svelte-h":!0}),U(te)!=="svelte-1wa3lpj"&&(te.textContent=bs),Cl=i(e),p(le.$$.fragment,e),gl=i(e),p(ne.$$.fragment,e),Il=i(e),se=y(e,"P",{"data-svelte-h":!0}),U(se)!=="svelte-45wrne"&&(se.textContent=$s),vl=i(e),p(ie.$$.fragment,e),Bl=i(e),p(ae.$$.fragment,e),Gl=i(e),p(pe.$$.fragment,e),Rl=i(e),p(Me.$$.fragment,e),Wl=i(e),p(oe.$$.fragment,e),Zl=i(e),p(re.$$.fragment,e),kl=i(e),p(ce.$$.fragment,e),zl=i(e),p(me.$$.fragment,e),Vl=i(e),p(de.$$.fragment,e),El=i(e),p(ye.$$.fragment,e),Al=i(e),p(Ue.$$.fragment,e),Sl=i(e),p(we.$$.fragment,e),Nl=i(e),p(ue.$$.fragment,e),Ql=i(e),p(Te.$$.fragment,e),Yl=i(e),p(he.$$.fragment,e),Xl=i(e),p(Je.$$.fragment,e),Hl=i(e),je=y(e,"TABLE",{"data-svelte-h":!0}),U(je)!=="svelte-1tbdtbk"&&(je.innerHTML=fs),xl=i(e),p(be.$$.fragment,e),_l=i(e),p($e.$$.fragment,e),Ll=i(e),p(fe.$$.fragment,e),Dl=i(e),p(Ce.$$.fragment,e),Fl=i(e),p(ge.$$.fragment,e),ql=i(e),p(Ie.$$.fragment,e),Pl=i(e),p(ve.$$.fragment,e),Ol=i(e),p(Be.$$.fragment,e),Kl=i(e),p(Ge.$$.fragment,e),en=i(e),p(Re.$$.fragment,e),tn=i(e),p(We.$$.fragment,e),ln=i(e),Ze=y(e,"P",{"data-svelte-h":!0}),U(Ze)!=="svelte-3l670j"&&(Ze.textContent=Cs),nn=i(e),ke=y(e,"UL",{"data-svelte-h":!0}),U(ke)!=="svelte-155ynzn"&&(ke.innerHTML=gs),sn=i(e),p(ze.$$.fragment,e),an=i(e),p(Ve.$$.fragment,e),pn=i(e),Ee=y(e,"P",{"data-svelte-h":!0}),U(Ee)!=="svelte-fafxqb"&&(Ee.textContent=Is),Mn=i(e),Ae=y(e,"UL",{"data-svelte-h":!0}),U(Ae)!=="svelte-18px49v"&&(Ae.innerHTML=vs),on=i(e),p(Se.$$.fragment,e),rn=i(e),p(Ne.$$.fragment,e),cn=i(e),Qe=y(e,"P",{"data-svelte-h":!0}),U(Qe)!=="svelte-12imxbm"&&(Qe.textContent=Bs),mn=i(e),Ye=y(e,"UL",{"data-svelte-h":!0}),U(Ye)!=="svelte-1d4vvgu"&&(Ye.innerHTML=Gs),dn=i(e),p(Xe.$$.fragment,e),yn=i(e),p(He.$$.fragment,e),Un=i(e),xe=y(e,"P",{"data-svelte-h":!0}),U(xe)!=="svelte-vikpdy"&&(xe.innerHTML=Rs),wn=i(e),p(_e.$$.fragment,e),un=i(e),p(Le.$$.fragment,e),Tn=i(e),p(De.$$.fragment,e),hn=i(e),Fe=y(e,"P",{"data-svelte-h":!0}),U(Fe)!=="svelte-4hybbi"&&(Fe.innerHTML=Ws),Jn=i(e),p(qe.$$.fragment,e),jn=i(e),p(Pe.$$.fragment,e),bn=i(e),Oe=y(e,"P",{"data-svelte-h":!0}),U(Oe)!=="svelte-hxv9nu"&&(Oe.textContent=Zs),$n=i(e),Ke=y(e,"TABLE",{"data-svelte-h":!0}),U(Ke)!=="svelte-13xbxyb"&&(Ke.innerHTML=ks),fn=i(e),p(et.$$.fragment,e),Cn=i(e),tt=y(e,"P",{"data-svelte-h":!0}),U(tt)!=="svelte-t6k8kz"&&(tt.textContent=zs),gn=i(e),p(lt.$$.fragment,e),In=i(e),p(nt.$$.fragment,e),vn=i(e),p(st.$$.fragment,e),Bn=i(e),it=y(e,"P",{"data-svelte-h":!0}),U(it)!=="svelte-1cf3oco"&&(it.innerHTML=Vs),Gn=i(e),p(at.$$.fragment,e),Rn=i(e),pt=y(e,"P",{"data-svelte-h":!0}),U(pt)!=="svelte-1tkq905"&&(pt.textContent=Es),Wn=i(e),p(Mt.$$.fragment,e),Zn=i(e),ot=y(e,"P",{"data-svelte-h":!0}),U(ot)!=="svelte-2tuyb2"&&(ot.innerHTML=As),kn=i(e),rt=y(e,"P",{"data-svelte-h":!0}),U(rt)!=="svelte-1h4rprr"&&(rt.innerHTML=Ss),zn=i(e),T=y(e,"OL",{});var At=Yt(T);J=y(At,"LI",{});var St=Yt(J);kt=y(St,"P",{"data-svelte-h":!0}),U(kt)!=="svelte-15ghan8"&&(kt.innerHTML=Ns),is=i(St),p(ct.$$.fragment,St),as=i(St),zt=y(St,"P",{"data-svelte-h":!0}),U(zt)!=="svelte-9hs22e"&&(zt.textContent=Qs),St.forEach(l),ps=i(At),mt=y(At,"LI",{});var ss=Yt(mt);Vt=y(ss,"P",{"data-svelte-h":!0}),U(Vt)!=="svelte-phawkn"&&(Vt.innerHTML=Ys),Ms=i(ss),p(dt.$$.fragment,ss),ss.forEach(l),os=i(At),Et=y(At,"LI",{"data-svelte-h":!0}),U(Et)!=="svelte-1hehqsr"&&(Et.innerHTML=Xs),At.forEach(l),Vn=i(e),p(yt.$$.fragment,e),En=i(e),Ut=y(e,"P",{"data-svelte-h":!0}),U(Ut)!=="svelte-1utrao1"&&(Ut.innerHTML=Hs),An=i(e),p(wt.$$.fragment,e),Sn=i(e),ut=y(e,"UL",{"data-svelte-h":!0}),U(ut)!=="svelte-12qxsn4"&&(ut.innerHTML=xs),Nn=i(e),p(Tt.$$.fragment,e),Qn=i(e),p(ht.$$.fragment,e),Yn=i(e),p(Jt.$$.fragment,e),Xn=i(e),p(jt.$$.fragment,e),Hn=i(e),p(bt.$$.fragment,e),xn=i(e),$t=y(e,"P",{"data-svelte-h":!0}),U($t)!=="svelte-1o2mi9d"&&($t.innerHTML=_s),_n=i(e),p(ft.$$.fragment,e),Ln=i(e),Ct=y(e,"P",{"data-svelte-h":!0}),U(Ct)!=="svelte-bfyr3c"&&(Ct.textContent=Ls),Dn=i(e),gt=y(e,"UL",{"data-svelte-h":!0}),U(gt)!=="svelte-k66c3q"&&(gt.innerHTML=Ds),Fn=i(e),p(It.$$.fragment,e),qn=i(e),vt=y(e,"OL",{"data-svelte-h":!0}),U(vt)!=="svelte-lrk1ar"&&(vt.innerHTML=Fs),Pn=i(e),p(Bt.$$.fragment,e),On=i(e),Gt=y(e,"UL",{"data-svelte-h":!0}),U(Gt)!=="svelte-w90nqd"&&(Gt.innerHTML=qs),Kn=i(e),p(Rt.$$.fragment,e),es=i(e),Wt=y(e,"UL",{"data-svelte-h":!0}),U(Wt)!=="svelte-7e6jk9"&&(Wt.innerHTML=Ps),ts=i(e),p(Zt.$$.fragment,e),ls=i(e),Qt=y(e,"P",{}),Yt(Qt).forEach(l),this.h()},h(){rs(h,"name","hf:doc:metadata"),rs(h,"content",pi),rs(j,"align","center")},m(e,t){u(document.head,h),n(e,Xt,t),n(e,Nt,t),n(e,Ht,t),M(b,e,t),n(e,xt,t),M($,e,t),n(e,_t,t),n(e,f,t),n(e,Lt,t),n(e,j,t),n(e,Dt,t),M(C,e,t),n(e,Ft,t),n(e,g,t),n(e,qt,t),n(e,I,t),n(e,Pt,t),M(v,e,t),n(e,Ot,t),M(B,e,t),n(e,Kt,t),M(G,e,t),n(e,el,t),n(e,R,t),n(e,tl,t),M(W,e,t),n(e,ll,t),M(Z,e,t),n(e,nl,t),M(k,e,t),n(e,sl,t),M(z,e,t),n(e,il,t),M(V,e,t),n(e,al,t),M(E,e,t),n(e,pl,t),n(e,A,t),n(e,Ml,t),M(S,e,t),n(e,ol,t),M(N,e,t),n(e,rl,t),n(e,Q,t),n(e,cl,t),M(Y,e,t),n(e,ml,t),M(X,e,t),n(e,dl,t),n(e,H,t),n(e,yl,t),M(x,e,t),n(e,Ul,t),M(_,e,t),n(e,wl,t),M(L,e,t),n(e,ul,t),n(e,D,t),n(e,Tl,t),M(F,e,t),n(e,hl,t),M(q,e,t),n(e,Jl,t),M(P,e,t),n(e,jl,t),n(e,O,t),n(e,bl,t),M(K,e,t),n(e,$l,t),M(ee,e,t),n(e,fl,t),n(e,te,t),n(e,Cl,t),M(le,e,t),n(e,gl,t),M(ne,e,t),n(e,Il,t),n(e,se,t),n(e,vl,t),M(ie,e,t),n(e,Bl,t),M(ae,e,t),n(e,Gl,t),M(pe,e,t),n(e,Rl,t),M(Me,e,t),n(e,Wl,t),M(oe,e,t),n(e,Zl,t),M(re,e,t),n(e,kl,t),M(ce,e,t),n(e,zl,t),M(me,e,t),n(e,Vl,t),M(de,e,t),n(e,El,t),M(ye,e,t),n(e,Al,t),M(Ue,e,t),n(e,Sl,t),M(we,e,t),n(e,Nl,t),M(ue,e,t),n(e,Ql,t),M(Te,e,t),n(e,Yl,t),M(he,e,t),n(e,Xl,t),M(Je,e,t),n(e,Hl,t),n(e,je,t),n(e,xl,t),M(be,e,t),n(e,_l,t),M($e,e,t),n(e,Ll,t),M(fe,e,t),n(e,Dl,t),M(Ce,e,t),n(e,Fl,t),M(ge,e,t),n(e,ql,t),M(Ie,e,t),n(e,Pl,t),M(ve,e,t),n(e,Ol,t),M(Be,e,t),n(e,Kl,t),M(Ge,e,t),n(e,en,t),M(Re,e,t),n(e,tn,t),M(We,e,t),n(e,ln,t),n(e,Ze,t),n(e,nn,t),n(e,ke,t),n(e,sn,t),M(ze,e,t),n(e,an,t),M(Ve,e,t),n(e,pn,t),n(e,Ee,t),n(e,Mn,t),n(e,Ae,t),n(e,on,t),M(Se,e,t),n(e,rn,t),M(Ne,e,t),n(e,cn,t),n(e,Qe,t),n(e,mn,t),n(e,Ye,t),n(e,dn,t),M(Xe,e,t),n(e,yn,t),M(He,e,t),n(e,Un,t),n(e,xe,t),n(e,wn,t),M(_e,e,t),n(e,un,t),M(Le,e,t),n(e,Tn,t),M(De,e,t),n(e,hn,t),n(e,Fe,t),n(e,Jn,t),M(qe,e,t),n(e,jn,t),M(Pe,e,t),n(e,bn,t),n(e,Oe,t),n(e,$n,t),n(e,Ke,t),n(e,fn,t),M(et,e,t),n(e,Cn,t),n(e,tt,t),n(e,gn,t),M(lt,e,t),n(e,In,t),M(nt,e,t),n(e,vn,t),M(st,e,t),n(e,Bn,t),n(e,it,t),n(e,Gn,t),M(at,e,t),n(e,Rn,t),n(e,pt,t),n(e,Wn,t),M(Mt,e,t),n(e,Zn,t),n(e,ot,t),n(e,kn,t),n(e,rt,t),n(e,zn,t),n(e,T,t),u(T,J),u(J,kt),u(J,is),M(ct,J,null),u(J,as),u(J,zt),u(T,ps),u(T,mt),u(mt,Vt),u(mt,Ms),M(dt,mt,null),u(T,os),u(T,Et),n(e,Vn,t),M(yt,e,t),n(e,En,t),n(e,Ut,t),n(e,An,t),M(wt,e,t),n(e,Sn,t),n(e,ut,t),n(e,Nn,t),M(Tt,e,t),n(e,Qn,t),M(ht,e,t),n(e,Yn,t),M(Jt,e,t),n(e,Xn,t),M(jt,e,t),n(e,Hn,t),M(bt,e,t),n(e,xn,t),n(e,$t,t),n(e,_n,t),M(ft,e,t),n(e,Ln,t),n(e,Ct,t),n(e,Dn,t),n(e,gt,t),n(e,Fn,t),M(It,e,t),n(e,qn,t),n(e,vt,t),n(e,Pn,t),M(Bt,e,t),n(e,On,t),n(e,Gt,t),n(e,Kn,t),M(Rt,e,t),n(e,es,t),n(e,Wt,t),n(e,ts,t),M(Zt,e,t),n(e,ls,t),n(e,Qt,t),ns=!0},p:Ks,i(e){ns||(o(b.$$.fragment,e),o($.$$.fragment,e),o(C.$$.fragment,e),o(v.$$.fragment,e),o(B.$$.fragment,e),o(G.$$.fragment,e),o(W.$$.fragment,e),o(Z.$$.fragment,e),o(k.$$.fragment,e),o(z.$$.fragment,e),o(V.$$.fragment,e),o(E.$$.fragment,e),o(S.$$.fragment,e),o(N.$$.fragment,e),o(Y.$$.fragment,e),o(X.$$.fragment,e),o(x.$$.fragment,e),o(_.$$.fragment,e),o(L.$$.fragment,e),o(F.$$.fragment,e),o(q.$$.fragment,e),o(P.$$.fragment,e),o(K.$$.fragment,e),o(ee.$$.fragment,e),o(le.$$.fragment,e),o(ne.$$.fragment,e),o(ie.$$.fragment,e),o(ae.$$.fragment,e),o(pe.$$.fragment,e),o(Me.$$.fragment,e),o(oe.$$.fragment,e),o(re.$$.fragment,e),o(ce.$$.fragment,e),o(me.$$.fragment,e),o(de.$$.fragment,e),o(ye.$$.fragment,e),o(Ue.$$.fragment,e),o(we.$$.fragment,e),o(ue.$$.fragment,e),o(Te.$$.fragment,e),o(he.$$.fragment,e),o(Je.$$.fragment,e),o(be.$$.fragment,e),o($e.$$.fragment,e),o(fe.$$.fragment,e),o(Ce.$$.fragment,e),o(ge.$$.fragment,e),o(Ie.$$.fragment,e),o(ve.$$.fragment,e),o(Be.$$.fragment,e),o(Ge.$$.fragment,e),o(Re.$$.fragment,e),o(We.$$.fragment,e),o(ze.$$.fragment,e),o(Ve.$$.fragment,e),o(Se.$$.fragment,e),o(Ne.$$.fragment,e),o(Xe.$$.fragment,e),o(He.$$.fragment,e),o(_e.$$.fragment,e),o(Le.$$.fragment,e),o(De.$$.fragment,e),o(qe.$$.fragment,e),o(Pe.$$.fragment,e),o(et.$$.fragment,e),o(lt.$$.fragment,e),o(nt.$$.fragment,e),o(st.$$.fragment,e),o(at.$$.fragment,e),o(Mt.$$.fragment,e),o(ct.$$.fragment,e),o(dt.$$.fragment,e),o(yt.$$.fragment,e),o(wt.$$.fragment,e),o(Tt.$$.fragment,e),o(ht.$$.fragment,e),o(Jt.$$.fragment,e),o(jt.$$.fragment,e),o(bt.$$.fragment,e),o(ft.$$.fragment,e),o(It.$$.fragment,e),o(Bt.$$.fragment,e),o(Rt.$$.fragment,e),o(Zt.$$.fragment,e),ns=!0)},o(e){r(b.$$.fragment,e),r($.$$.fragment,e),r(C.$$.fragment,e),r(v.$$.fragment,e),r(B.$$.fragment,e),r(G.$$.fragment,e),r(W.$$.fragment,e),r(Z.$$.fragment,e),r(k.$$.fragment,e),r(z.$$.fragment,e),r(V.$$.fragment,e),r(E.$$.fragment,e),r(S.$$.fragment,e),r(N.$$.fragment,e),r(Y.$$.fragment,e),r(X.$$.fragment,e),r(x.$$.fragment,e),r(_.$$.fragment,e),r(L.$$.fragment,e),r(F.$$.fragment,e),r(q.$$.fragment,e),r(P.$$.fragment,e),r(K.$$.fragment,e),r(ee.$$.fragment,e),r(le.$$.fragment,e),r(ne.$$.fragment,e),r(ie.$$.fragment,e),r(ae.$$.fragment,e),r(pe.$$.fragment,e),r(Me.$$.fragment,e),r(oe.$$.fragment,e),r(re.$$.fragment,e),r(ce.$$.fragment,e),r(me.$$.fragment,e),r(de.$$.fragment,e),r(ye.$$.fragment,e),r(Ue.$$.fragment,e),r(we.$$.fragment,e),r(ue.$$.fragment,e),r(Te.$$.fragment,e),r(he.$$.fragment,e),r(Je.$$.fragment,e),r(be.$$.fragment,e),r($e.$$.fragment,e),r(fe.$$.fragment,e),r(Ce.$$.fragment,e),r(ge.$$.fragment,e),r(Ie.$$.fragment,e),r(ve.$$.fragment,e),r(Be.$$.fragment,e),r(Ge.$$.fragment,e),r(Re.$$.fragment,e),r(We.$$.fragment,e),r(ze.$$.fragment,e),r(Ve.$$.fragment,e),r(Se.$$.fragment,e),r(Ne.$$.fragment,e),r(Xe.$$.fragment,e),r(He.$$.fragment,e),r(_e.$$.fragment,e),r(Le.$$.fragment,e),r(De.$$.fragment,e),r(qe.$$.fragment,e),r(Pe.$$.fragment,e),r(et.$$.fragment,e),r(lt.$$.fragment,e),r(nt.$$.fragment,e),r(st.$$.fragment,e),r(at.$$.fragment,e),r(Mt.$$.fragment,e),r(ct.$$.fragment,e),r(dt.$$.fragment,e),r(yt.$$.fragment,e),r(wt.$$.fragment,e),r(Tt.$$.fragment,e),r(ht.$$.fragment,e),r(Jt.$$.fragment,e),r(jt.$$.fragment,e),r(bt.$$.fragment,e),r(ft.$$.fragment,e),r(It.$$.fragment,e),r(Bt.$$.fragment,e),r(Rt.$$.fragment,e),r(Zt.$$.fragment,e),ns=!1},d(e){e&&(l(Xt),l(Nt),l(Ht),l(xt),l(_t),l(f),l(Lt),l(j),l(Dt),l(Ft),l(g),l(qt),l(I),l(Pt),l(Ot),l(Kt),l(el),l(R),l(tl),l(ll),l(nl),l(sl),l(il),l(al),l(pl),l(A),l(Ml),l(ol),l(rl),l(Q),l(cl),l(ml),l(dl),l(H),l(yl),l(Ul),l(wl),l(ul),l(D),l(Tl),l(hl),l(Jl),l(jl),l(O),l(bl),l($l),l(fl),l(te),l(Cl),l(gl),l(Il),l(se),l(vl),l(Bl),l(Gl),l(Rl),l(Wl),l(Zl),l(kl),l(zl),l(Vl),l(El),l(Al),l(Sl),l(Nl),l(Ql),l(Yl),l(Xl),l(Hl),l(je),l(xl),l(_l),l(Ll),l(Dl),l(Fl),l(ql),l(Pl),l(Ol),l(Kl),l(en),l(tn),l(ln),l(Ze),l(nn),l(ke),l(sn),l(an),l(pn),l(Ee),l(Mn),l(Ae),l(on),l(rn),l(cn),l(Qe),l(mn),l(Ye),l(dn),l(yn),l(Un),l(xe),l(wn),l(un),l(Tn),l(hn),l(Fe),l(Jn),l(jn),l(bn),l(Oe),l($n),l(Ke),l(fn),l(Cn),l(tt),l(gn),l(In),l(vn),l(Bn),l(it),l(Gn),l(Rn),l(pt),l(Wn),l(Zn),l(ot),l(kn),l(rt),l(zn),l(T),l(Vn),l(En),l(Ut),l(An),l(Sn),l(ut),l(Nn),l(Qn),l(Yn),l(Xn),l(Hn),l(xn),l($t),l(_n),l(Ln),l(Ct),l(Dn),l(gt),l(Fn),l(qn),l(vt),l(Pn),l(On),l(Gt),l(Kn),l(es),l(Wt),l(ts),l(ls),l(Qt)),l(h),c(b,e),c($,e),c(C,e),c(v,e),c(B,e),c(G,e),c(W,e),c(Z,e),c(k,e),c(z,e),c(V,e),c(E,e),c(S,e),c(N,e),c(Y,e),c(X,e),c(x,e),c(_,e),c(L,e),c(F,e),c(q,e),c(P,e),c(K,e),c(ee,e),c(le,e),c(ne,e),c(ie,e),c(ae,e),c(pe,e),c(Me,e),c(oe,e),c(re,e),c(ce,e),c(me,e),c(de,e),c(ye,e),c(Ue,e),c(we,e),c(ue,e),c(Te,e),c(he,e),c(Je,e),c(be,e),c($e,e),c(fe,e),c(Ce,e),c(ge,e),c(Ie,e),c(ve,e),c(Be,e),c(Ge,e),c(Re,e),c(We,e),c(ze,e),c(Ve,e),c(Se,e),c(Ne,e),c(Xe,e),c(He,e),c(_e,e),c(Le,e),c(De,e),c(qe,e),c(Pe,e),c(et,e),c(lt,e),c(nt,e),c(st,e),c(at,e),c(Mt,e),c(ct),c(dt),c(yt,e),c(wt,e),c(Tt,e),c(ht,e),c(Jt,e),c(jt,e),c(bt,e),c(ft,e),c(It,e),c(Bt,e),c(Rt,e),c(Zt,e)}}}const pi='{"title":"Unity ML-Agents Environment","local":"unity-ml-agents-environment","sections":[{"title":"Supported Environments","local":"supported-environments","sections":[],"depth":2},{"title":"Installation","local":"installation","sections":[{"title":"Option 1: Non-Docker Installation (Local Development)","local":"option-1-non-docker-installation-local-development","sections":[{"title":"Prerequisites","local":"prerequisites","sections":[],"depth":4},{"title":"Install from OpenEnv Repository","local":"install-from-openenv-repository","sections":[],"depth":4},{"title":"Install Dependencies Only","local":"install-dependencies-only","sections":[],"depth":4},{"title":"Verify Installation","local":"verify-installation","sections":[],"depth":4}],"depth":3},{"title":"Option 2: Docker Installation","local":"option-2-docker-installation","sections":[{"title":"Prerequisites","local":"prerequisites","sections":[],"depth":4},{"title":"Build the Docker Image","local":"build-the-docker-image","sections":[],"depth":4},{"title":"Run the Docker Container","local":"run-the-docker-container","sections":[],"depth":4},{"title":"Install Client Dependencies","local":"install-client-dependencies","sections":[],"depth":4}],"depth":3}],"depth":2},{"title":"Quick Start","local":"quick-start","sections":[{"title":"Option 1: Direct Mode (Fastest for Testing)","local":"option-1-direct-mode-fastest-for-testing","sections":[],"depth":3},{"title":"Option 2: Server Mode","local":"option-2-server-mode","sections":[],"depth":3},{"title":"Option 3: Docker Mode","local":"option-3-docker-mode","sections":[],"depth":3}],"depth":2},{"title":"Example Scripts","local":"example-scripts","sections":[{"title":"Basic Usage Examples","local":"basic-usage-examples","sections":[{"title":"1. Direct Mode - Quick Testing","local":"1-direct-mode---quick-testing","sections":[],"depth":4},{"title":"2. Direct Mode - Training Configuration","local":"2-direct-mode---training-configuration","sections":[],"depth":4},{"title":"3. Direct Mode - 3DBall with Custom Window","local":"3-direct-mode---3dball-with-custom-window","sections":[],"depth":4},{"title":"4. Docker Mode - Production-like Testing","local":"4-docker-mode---production-like-testing","sections":[],"depth":4},{"title":"5. Server Mode - Separate Server and Client","local":"5-server-mode---separate-server-and-client","sections":[],"depth":4},{"title":"6. Alternating Environments","local":"6-alternating-environments","sections":[],"depth":4}],"depth":3},{"title":"Command Line Options","local":"command-line-options","sections":[],"depth":3}],"depth":2},{"title":"Python Client Usage","local":"python-client-usage","sections":[{"title":"Connect to Server","local":"connect-to-server","sections":[],"depth":3},{"title":"Connect via Docker","local":"connect-via-docker","sections":[],"depth":3},{"title":"Switch Environments Dynamically","local":"switch-environments-dynamically","sections":[],"depth":3},{"title":"Direct Mode (Embedded Server)","local":"direct-mode-embedded-server","sections":[],"depth":3}],"depth":2},{"title":"Action Spaces","local":"action-spaces","sections":[{"title":"PushBlock (Discrete)","local":"pushblock-discrete","sections":[],"depth":3},{"title":"3DBall (Continuous)","local":"3dball-continuous","sections":[],"depth":3}],"depth":2},{"title":"Observations","local":"observations","sections":[{"title":"Visual Observations (Optional)","local":"visual-observations-optional","sections":[],"depth":3}],"depth":2},{"title":"Configuration","local":"configuration","sections":[{"title":"Direct Mode Arguments","local":"direct-mode-arguments","sections":[],"depth":3},{"title":"Environment Variables","local":"environment-variables","sections":[],"depth":3}],"depth":2},{"title":"Environment State","local":"environment-state","sections":[],"depth":2},{"title":"Troubleshooting","local":"troubleshooting","sections":[{"title":"Docker Mode Fails on Apple Silicon (M1/M2/M3/M4)","local":"docker-mode-fails-on-apple-silicon-m1m2m3m4","sections":[],"depth":3},{"title":"First Run is Slow","local":"first-run-is-slow","sections":[],"depth":3},{"title":"Graphics Not Showing","local":"graphics-not-showing","sections":[],"depth":3},{"title":"Docker Container Fails to Start","local":"docker-container-fails-to-start","sections":[],"depth":3},{"title":"Import Errors","local":"import-errors","sections":[],"depth":3},{"title":"mlagents-envs Installation Issues","local":"mlagents-envs-installation-issues","sections":[],"depth":3}],"depth":2},{"title":"Caveats","local":"caveats","sections":[],"depth":2},{"title":"Dependencies","local":"dependencies","sections":[],"depth":2},{"title":"References","local":"references","sections":[],"depth":2}],"depth":1}';function Mi(cs){return ei(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class di extends ti{constructor(h){super(),li(this,h,Mi,ai,Os,{})}}export{di as component};

Xet Storage Details

Size:
72.5 kB
·
Xet hash:
c40a7a511f4e44abb0028c45502c34a7574ac4fa8b93d3bddaad1dde0c647640

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.